共48道题,当前是第24

初赛真题

01 #include<bits/stdc++.h>
02 using namespace std;
03 int main() {
04     int num = 0;
05     cin >> num; //保证num>= 100,且在int范围内
06     int max_primedivisor = 0;
07     int cnt = 1;
08     for (int i = 2; i * i <= num; i++) {
09         if (num % i == 0) {
10             int tmp = 1;
11             while (num % i == 0) num /= i, tmp++;
12             max_primedivisor = max(max_primedivisor, i);
13             cnt *= tmp;
14         }
15     }
16     max_primedivisor = max(max_primedivisor, num);
17     if (num > 1) cnt *= 2;
18     cout << max_primedivisor << " " << cnt << "\n";
19     return 0;
20 }

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

该段代码是在枚举 $num$ 中所包含的质因数,找到最⼤的质因数,并且求解出唯⼀分解中每个质数的指数 $+1$ 的乘积。因为⼤⼩超过 $\sqrt{num}$ 的质因数只可能有⼀个,所以这⾥是通过枚举所有⼩于 $\sqrt{num}$ 的数字并且判断是否为因数的⽅法来找质因数的。在最坏情况下,$num$ 本身是质数,需要枚举 $\sqrt{num}$ 次。在最好情况下,$num$ 是 $2$ 的幂次,只需要循环 $lognum$ 次即可。

Question

1. 代码中 max_primedivisor = max(max_primedivisor ,num); 这句话去掉对答案没有影响。( )

2. 当读⼊的 num=p * q 其中 p < q ,且 p,q 为质数,则 for 循环中 i 遍历到 q 时退出循环。( )

3. 该算法的最坏时间复杂度为()

4. 当读⼊ $2021$ 时输出为( )

5. 当读⼊的数 num = p * p * p * q * q * q * r * r * s * t 时,其中 p < q < r < s < t ,且 p,q,r,s,t 均为质数,则输出的第⼆个数( )

6. 在最好的情况下,时间复杂度为()