共63道题,当前是第62

Description

1	#include <bits/stdc++.h>
2	using namespace std;
3	int main(){
4		int num = 0;
5		cin >> num; // 保证num >= 100 且在 int 范围内
6		int max_primedivisor = 0;
7		int cnt = 1;
8		for (int i = 2; i * i <= num; ++i){
9			if (num % i == 0){
10				int tmp = 1;
11				while (n % 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. F 

2. F

3. B

4. D

5. A

6. D。 

该段代码是在枚举 $num$ 中所包含的质因数,找到最大的质因数,并且求解出唯一分解中每个质数的指数$+1$的乘积。

因为大小超过 $\sqrt{n}$ 的质因数只可能有一个,所以这⾥是通过枚举所有小于 $\sqrt{n}$ 的数字并且判断是否为因数的方法来找质因数的。

在最坏情况下,$num$ 本身是质数,需要枚举 $\sqrt{num}$ 次。

在最好情况下,$num$ 是 $2$ 的幂次,只需要循环 $O(log_2num)$ 次即可。

Question

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

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

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

当读入$\sqrt{2021}$ 时输出为

当读入的数 $num = p* p*p*q*q *r *r*s *t$ 时,其中 $p

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