JavaScript is required

Cho đoạn chương trình sau:

public class Test {

public static void main(String[] args) {

int k=0,n,dem,j=0;

while(j<3) {

k++;

dem=0;

for(n=2;n<=k;n++) {

if(k%n==0) dem++;

if(dem==1) {

System.out.print(k+" ");

j++;

}

}

}

}

}

Đoạn chương trình trên cho kết quả là bao nhiêu?

A.

Chương trình báo lỗi

B.

2 3 5

C.

4 4 6

D.

2 3 4 4

Trả lời:

Đáp án đúng: A


Đoạn chương trình trên thực hiện một vòng lặp `while` với điều kiện `j < 3`. Bên trong vòng lặp này, biến `k` tăng lên mỗi lần lặp. Một vòng lặp `for` lồng nhau kiểm tra xem `k` có chia hết cho bất kỳ số `n` nào từ 2 đến `k` hay không. Biến `dem` đếm số lượng ước của `k` trong khoảng từ 2 đến `k`. Nếu `dem` bằng 1, tức là `k` có duy nhất một ước trong khoảng đó (chính là `k` nếu `k` là số nguyên tố), thì `k` được in ra và `j` tăng lên. Vòng lặp `while` sẽ kết thúc khi `j` đạt đến 3. Bước 1: k=1, dem=0, vòng for không chạy vì n=2 > k=1. Bước 2: k=2, dem=0, vòng for chạy với n=2, k%n==0, dem=1. Vì dem==1 nên in ra 2, j=1. Bước 3: k=3, dem=0, vòng for chạy với n=2, k%n!=0; n=3, k%n==0, dem=1. Vì dem==1 nên in ra 3, j=2. Bước 4: k=4, dem=0, vòng for chạy với n=2, k%n==0, dem=1. Vì dem==1 nên in ra 4, j=3. Vòng while kết thúc. Kết quả in ra là 2 3 4. Tuy nhiên, không có đáp án nào trùng khớp với kết quả này. Xét lại điều kiện if(dem==1). Điều kiện này chỉ đúng khi k là số nguyên tố. - k=1: vòng for không chạy. - k=2: n=2, k%n==0, dem=1. In ra 2, j=1. - k=3: n=2, k%n!=0; n=3, k%n==0, dem=1. In ra 3, j=2. - k=4: n=2, k%n==0, dem=1. In ra 4, j=3. vòng while dừng. Như vậy, kết quả in ra là 2 3 4. Tuy nhiên đáp án này không có trong các lựa chọn. Xem xét lại điều kiện dừng vòng lặp. Với k=4, dem=1, in ra 4, j=3. Như vậy vòng lặp while dừng. Vậy không có đáp án nào đúng. Đáp án gần đúng nhất là đáp án C, tuy nhiên kết quả đúng phải là 2 3 4.

Câu hỏi liên quan