共48道题,当前是第48

初赛真题

01 #include <iostream>
02 
03 using namespace std;
04 
05 const int maxn = 10000000;
06 int n, size;
07 int prime[maxn + 5];
08 bool vis[maxn + 5];
09 
10 int main() {
11     cin >> n;
12     size = 0;
13     for (int i = 2; i <= n; ++i) {
14         if (!vis[i]) {
15             size = size + 1;
16             prime[size] = i;
17         }
18         for (int j = 1; i * prime[j] <= n; ++j) {
19             vis[i * prime[j]] = 1;
20             if (i % prime[j] == 0)
21                 break;
22         }
23     }
24     int sum = 0;
25     for (int i = 1; i <= size; ++i)
26         sum = sum + prime[i];
27     cout << sum << endl;
28     return 0;
29 }

1. A。
2. B。
3. B。
4. A。
5. A。
6. A。

该段代码实现了素数的线性筛,通过线性筛法筛出所有小于 $n$ 的素数并存放在 prime 数组中,然后再对所有素数求和,复杂度为 $O(n)$ 。需要注意的是,$1$  不是质数,所以不可能输出数字 $1$');

Question

1. n必须小于等于 10000004,否则程序可能会运行时错误。( )

2. 输出可能为 1 。( )

3. 若输入为 1000000 ,那么程序会输出小于等于 1000000 的质数之和。

4. 若输入为 1000000 ,那么程序会输出小于等于 1000000 的质数之和。

5. 若输入 n 为 40 ,那么输出为 ( )。

6. 若输出的答案在 $50000 \sim 5000000$ 之间,那么 n 的量级约为 ( )