阅读程序(第三题):线性筛求素数表与欧拉函数

fk869753 组合题 共 个子题

阅读下面程序,完成后面的判断题和单选题。判断题正确填 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)。( )

A

正确

B

错误

子题 判断题

判断题:当输入为 10 时,程序输出为第一行 4、第二行 32。( )

A

正确

B

错误

子题 判断题

判断题:若把第 20 行的 `phi[i * p] = phi[i] * p;` 改为 `phi[i * p] = phi[i] * (p - 1);`,其余不变,则当输入为 10 时,程序第二个输出会减小。( )

A

正确

B

错误

子题 单选题

当输入为 12 时,程序第一个输出为( )。

A

4

B

5

C

6

D

12

子题 单选题

当输入为 20 时,程序第二个输出为( )。

A

98

B

110

C

128

D

152

子题 单选题

该程序(线性筛)的时间复杂度为( )。

A

Θ(n log n)

B

Θ(n)

C

Θ(n log log n)

D

Θ(n²)

正在加载题目数据…
已答 /
子题
该题型需在试卷/作业中作答,单题练习暂不支持
答案解析
讨论
发布
登录后参与讨论 立即登录
发布讨论需先绑定并验证手机号 去绑定手机号
加载中…
我
我
回复 @
回复 @
发送
还没有人讨论,来发表第一条吧