Cho đoạn chương trình sau:
public class Test {
public static void main(String[] args) {
int n,k,dem;
for ( k = 1; k <= 10; k++ ) {
dem = 0;
for ( n = 3; n <= k; n++ ) {
if ( k%n==0) {
dem++;
}
if (dem > 1)
System.out.print(k);
}
}
}
}
Đoạn chương trình trên thực hiện công việc gì?
=>=>
Trả lời:
Đáp án đúng: A
Đoạn chương trình in ra các hợp số từ 1 đến 10.
Giải thích:
Vòng lặp ngoài `for ( k = 1; k <= 10; k++ )` duyệt các số từ 1 đến 10.
Vòng lặp trong `for ( n = 3; n <= k; n++ )` kiểm tra xem `k` có chia hết cho một số `n` nào đó trong khoảng từ 3 đến `k` hay không.
Biến `dem` đếm số lượng ước của `k` trong khoảng từ 3 đến `k`. Nếu `dem > 1`, tức là `k` có ít nhất hai ước trong khoảng này, thì `k` được in ra. Các số có từ hai ước trở lên (ngoài 1 và chính nó) là hợp số. Số 1 không phải là hợp số cũng không phải là số nguyên tố.
Ví dụ: Khi k = 4, vòng lặp trong sẽ chạy với n = 3 và n = 4. Khi n = 4, 4%4 == 0, dem = 1. Vì dem không lớn hơn 1, nên 4 không được in ra ở vòng lặp này.
Khi k = 6, vòng lặp trong sẽ chạy với n = 3, 4, 5, 6. Khi n = 3, 6%3 == 0, dem = 1. Khi n = 6, 6%6 == 0, dem = 2. Vì dem > 1, nên 6 được in ra.
Vậy chương trình in ra các hợp số từ 1 đến 10.