共63道题,当前是第54

Description

1   #include 
2   using namespace std;
3   int f[1001], g[1001], p[1001], m, n;
4   void init() {
5       f[1] = g[1] = 1;
6       for (int i = 2; i <= 1000; i++) {
7           if (!f[i]) {
8               p[++m] = i;
9               for (int j = i*i; j <= 1000; j += i)
10                  f[j] = 1;
11          }
12          g[i] = g[i-1] + f[i];
13      }
14  }
15  int main() {
16      init();
17      cin >> n;
18      cout << f[n] << endl;
19      cout << g[n] << endl;
20      if (n <= 100)
21          cout << p[n] << endl;
22      return 0;
23  }

1. 错误。 $init()$ 函数调用结束后,$m$ 的值为 $1 \sim 1000$ 范围内素数的个数,虽然我们不能很快得出这个结果,但是容易发现 $1 \sim 1000$ 范围内素数的个数肯定比非素数的个数要少,所以 $m$ 不可能是 $500$ 。
2. 正确。 $init()$ 函数调用结束后,所以素数 $i$ 对应的 $f[i]$ 均为 $0$,所有非素数 $i$ 对应的 $f[i]$ 均为 $1$。因为 $103$ 是素数,所以 $f[103]=0$。
3. 正确。 $g[1000]$ 表示的是 $1 \sim 1000$ 中非素数的个数, $m$ 表示的是 $1 \sim 1000$ 中素数的个数,所以 $g[1000]+m$ 等于 $1000$。
4. B。因为 $123$ 不是素数,所以 $f[123]=1$。
5. C。 $g[30]$ 表示 $1 \sim 30$ 范围内非素数的个数,$1 \sim 30$ 范围内共有 $20$ 个非素数,所以 $f[30]=20$。
6. B。 $p[i]$ 表示第 $i$ 个素数,我们可以依次列举出前 $25$ 个素数:$2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97$,可得第 $25$ 个素数 $p[25]=97$。

Question

第 $16$ 行执行结束后,$m$ 的值为 $500$。( )

第 $16$ 行执行结束后,$f[103]$ 的值为 $0$。( )

$g[1000]+m$ 等于 $1000$。( )

当输入为 `123` 时,输出的第一行为( )。

当输入为 $30$ 时,输出的第二行为( )。

当输入为 $25$ 时,输出的第三行为( )。