首页 / 客观题库

80722 - 同测活动第4场阅读程序3

题目(材料题)

(3)

01  #include <bits/stdc++.h>

02  #define INF 0x3f3f3f3f

03  using namespace std;

04  const int N = 1e6 + 5;

05  int dp[N];

06  bool vis[N];

07  vector<int> prime;

08  int main() {

09      memset(dp, INF, sizeof(dp));

10      memset(vis, false, sizeof(vis));

11      dp[1] = 0;

12      for (int i = 2; i <= 1000000; i++) {

13          if (!vis[i])

14              prime.push_back(i);

15          for (int p : prime) {

16              if (p * i > 1000000)

17                  break;

18              vis[p * i] = true;

19              if (i % p == 0)

20                  break;

21          }

22      }

23      for (int i = 1; i <= 1000000; i++) {

24          dp[i + 1] = min(dp[i + 1], dp[i] + 1);

25          for (int p : prime) {

26              if (p * i > 1000000)

27                  break;

28              dp[p * i] = min(dp[p * i], dp[i] + 1);

29          }

30      }

31      int n;

32      while (cin >> n)

33          cout << dp[n] << endl;

34      return 0;

35  }

假设输入不超过 $10^{6} $的正整数,完成下面的判断题和单选题

||
  1. 程序运行结束后,dp[i] 表示从 1 变到 i 所需的最少操作次数,每次操作可以选择加 1 或乘以一个质数。( )

正确

错误

  1. 第12行至第22行的循环结束后,prime 中存储了所有不超过$10^{6} $的质数,且每个合数只被标记一次。( )

正确

错误

31. 若将第23行的 for (int i = 1; i <= 1000000; i++) 改为 for (int i = 2; i <= 1000000; i++),程序的输出结果不变。(  )

正确

错误

32. (2分)第28行 dp[p * i] = min(dp[p * i], dp[i] + 1);可以使用dp[p * i] = (dp[p * i] < dp[i] + 1) ? dp[p * i] : dp[i] + 1;来替换,程序功能不变。(   )

正确

错误

( 单选 )

33. 当输入为 3 时,程序的输出是( )。

A 1

B 2

C 3

D 4

( 单选 )
  1.  程序的时间复杂度最接近(    )。

A O(n)

B O(n log log n)

C O(n log n)

D O($n^{2} $)

意见反馈

    最多上传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