在下面的 C 程序片段中,j、kn 和 TwoLog_n 是整数变量,A 是整数数组。变量n初始化为≥3的整数,TwoLog_n初始化为2*⌈log2(n)⌉的值
for (k = 3; k < = n; k++)
A[k] = 0;
for (k = 2; k < = TwoLog_n; k++)
for (j = k + 1; j < = n; j++)
A[j] = A[j] || (j % k);
for (j = 3; j < = n; j++)
if (!A[j]) printf("%d", j);
这个程序片段打印的一组数字是
(A) {米| m ≤ n, (∃ i) [m = i!]} 这里 i! i 的平均阶乘
(B) {米| m ≤ n, (∃ i) [m = i 2 ]}
(C) {米| m ≤ n,m 是素数}
(D) {}答案: (D)
说明:选项 (D) 是正确的,因为如果取 n=4,则 TwoLog_n 值为 4。
第一个循环最初 A[3]=A[4]=0;
然后两个循环 k = 2 到 4 和 j = 3 到 4
if k=2
j=3 A[3] = A[3] || (3%2)
= 0 || 1
A[3] = 1
j=4 A[4] = A[4] || (4%2)
= 0 || 0
A[4] = 0
K=3
j=4 A[4] = A[4] || (4%3)
= 0 || 1
A[4] = 1
K=4
J=5 condition false means terminate
A[3] = A[4] = 1
意味着最后一个打印循环永远不会执行。这个问题的测验