题库 信息学奥赛题库 题目列表 2023年CSP-S1阅读程序题2:01 #include <ios...
组合题

2023年CSP-S1阅读程序题2:

01 #include <iostream>
02 #include <cmath>
03  #include <vector>
04  #include <algorithm>
05 using namespace std;
06
07 long long solve1(int n){
08  vector<bool> p(n+1, true);
09  vector<long long> f(n+1,0),g(n+1,0);
10   f[1]= 1;
11  for (int i = 2; i*i <= n; i++){
12    if (p[i]){
13    vector<int> d;
14    for(int k = i;k <=n; k *= i)d.push_back(k);
15      reverse(d.begin(),d.end());
16      for (int k:d){for (int j =k; j<=n;j += k){
18      if (p[j]){
19       p[j]= false;
20       f[j]= i;
21       g[j]= k;
22      }
23     }
24    }  
25  }
26 }
27 for (int i = sqrt(n)+ 1; i <= n; i++){
28  if (p[i]){
29
f[i]= i;
30
g[i]= i;
31  }
32 }
33 long long sum = 1;
34  for(int i = 2; i <= n; i++){
35   f[i]= f[i / g[i]]*(g[i]* f[i]- 1)/(f[i]- 1);
36    sum += f[i];
37   }
38   return sum;
39}
40
41 long long solve2(int n){
42  long long sum = 0;
43  for(int i= 1; i <= n; i++){
44   sum += i*(n / i);
45  }
46   return sum;
47}
48
49 int main(){
50  int n;
51   cin >> n;
52  cout << solve1(n)<< endl;
53   cout << solve2(n)<< endl;
54   return 0;
55}

假设输入的n是不超过1000000的自然数,完成下面的判断题和单选题:

第1题 判断

将第15行删去,输出不变。 (   )

A.
正确
B.
错误
第2题 判断

当输入为“10”时,输出的第一行大于第二行。 (   )

A.
正确
B.
错误
第3题 判断

当输入为“1000”时,输出的第一行与第二行相等。 (    )

A.
正确
B.
错误
第4题 单选

solve1(n)的时间复杂度为(   )

A.

O(n log² n)

B.

(O(n)) 

C.

(O(n log n))

D.

(O(nlog log n)

第5题 单选

solve(2)的时间复杂度为(    )

A.

O(n²)

B.

O(n)

C.

O(n log n)

D.

O(

第6题 单选

输入为"5"时,输出的第二行为(   )

A.

“20”

B.

“21”

C.

“22”

D.

“23”

题目信息
阅读程序 初赛 2023年
-
正确率
0
评论
175
点击