阅读程序(第三题):线性筛求素数表与欧拉函数
阅读下面程序,完成后面的判断题和单选题。判断题正确填 A,错误填 B。程序读入一个整数 n(1 ≤ n ≤ 1000000)。第一行输出 1 到 n 之间的素数个数,第二行输出 Σ_{i=1}^{n} φ(i)。
#include <cstdio>
const int MAXN = 1000005;
int phi[MAXN], primes[MAXN], cnt = 0;
bool vis[MAXN];
int main() {
int n;
scanf("%d", &n);
phi[1] = 1;
for (int i = 2; i <= n; ++i) {
if (!vis[i]) {
primes[++cnt] = i;
phi[i] = i - 1;
}
for (int j = 1; j <= cnt && i * primes[j] <= n; ++j) {
int p = primes[j];
vis[i * p] = true;
if (i % p == 0) {
phi[i * p] = phi[i] * p;
break;
} else {
phi[i * p] = phi[i] * (p - 1);
}
}
}
long long s = 0;
for (int i = 1; i <= n; ++i) s += phi[i];
printf("%d\n%lld\n", cnt, s);
return 0;
} 子题 判断题
判断题:程序第一行输出的是 1 到 n 之间的素数个数,第二行输出的是 Σ_{i=1}^{n} φ(i)。( )
子题 判断题
判断题:当输入为 10 时,程序输出为第一行 4、第二行 32。( )
子题 判断题
判断题:若把第 20 行的 `phi[i * p] = phi[i] * p;` 改为 `phi[i * p] = phi[i] * (p - 1);`,其余不变,则当输入为 10 时,程序第二个输出会减小。( )
子题 单选题
当输入为 12 时,程序第一个输出为( )。
子题 单选题
当输入为 20 时,程序第二个输出为( )。
子题 单选题
该程序(线性筛)的时间复杂度为( )。
正在加载题目数据…
子题
该题型需在试卷/作业中作答,单题练习暂不支持
答案解析