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?
=k;n++)>3)>
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.