首页 / 客观题库

70284 - CSP-S第一轮同测模拟卷1阅读程序1

题目(材料题)

01 #include<iostream>

02 #include<vector>

03 using namespace std;

04 int solve1(int n) {

05     vector<int> pri;

06     vector<bool> np(n + 1, false);

07     vector<int> phi(n + 1, 0);

08     phi[1] = 1;

09     for (int i = 2; i <= n; i++) {

10         if (!np[i]) {

11             pri.push_back(i);

12             phi[i] = i - 1;

13         }

14         for (int p : pri) {

15             if (i * p > n) break;

16             np[i * p] = true;

17             if (i % p == 0) {

18                 phi[i * p] = phi[i] * p;

19                 break;

20             }

21             phi[i * p] = phi[i] * phi[p];

22         }

23     }

24     int ans = 0;

25     for (int v : phi) ans += v;

26     return ans;

27 }

28 int solve2(int n) {

29     int ans = n * (n - 1) / 2;

30     for (int i = 2; i <= n / 2; i++) {

31         ans -= (n / i) - 1;

32     }

33     return ans;

34 }

35 int main() {

36     int n;

37     cin >> n;

38     cout << solve1(n) << endl;

39     cout << solve2(n) << endl;

40     return 0;

41 }

假设输入的n是一个不超过10000的正整数,完成下面的判断题和单选题。

||

16.函数solve1()所实现算法的时间复杂度是$O(n^{2} )
$。(  )

正确

错误

17.当n=10时,输出的第二行的数字是38。(    )

正确

错误

( 单选 )

18.输入n=8时,输出的第一行的数字比第二行数字(     )

A 小3

B 大2

C 大1

D 一样大

( 单选 )

19.把第12行的代码改为“phi[i] = i;”,当输入为时n=1000,输出的第一行数字是(    )

A 1000

B 304192

C 500500

D 1000000

( 单选 )

20.有多少种不同的 n 的值,可以使得输出的两个数字的值相等(    )

A 0

B 5

C 5000

D 10000

意见反馈

    最多上传3张图片,格式为JPG、PNG、JPEG,单张不超过5MB

    注册

    发送验证码

    密码必须包含数字、字母和特殊字符

    找回密码

    发送验证码

    密码必须包含数字、字母和特殊字符

    运行 ID:67149

    • 测试点1:Accepted
    • 用时:0 ms
    • 内存:288 kb
    • 测试点2:Accepted
    • 用时:0 ms
    • 内存:288 kb
    输入
    203
    输出
    203

    test

    测评信息

    错误.in文件下载

    错误.out文件下载

    运行 ID:67149

    2019-01-24 15:06:36