第一次提交的时候90分,显示的超时,第一反应是难道有死循环? 检查一遍发现并没有,那就是真的超时了,然后翻阅blog,发现不需要去做判断是否是素数这一步,原因是任意一个非素数都是素数乘积构成,比如说,在经历i=2和i=3这样的循环之后,一定不能再被i=6整除,在经历i=2这样的循环之后,也一定不能再被i=4或者i=8..整除。
在去掉这个素数判断之后,就100分了。其他的,记得开long long就好了。
代码:
#include <bits/stdc++.h>
#define ll long long
ll n, k, ans, rc[100];
using namespace std;
int main() {
	ios::sync_with_stdio(false);
	int q;
	cin >> q;
	for (int i = 0; i < q; i++) {
		cin >> n >> k;//对其进行处理
		ans = 1;
		for (int j = 2; j <= n; j++) {//遍历所有的素数
			int cnt = 0;
			while (n % j == 0) {
				cnt++;
				n /= j;
			}
			//直到无法整除为止
			if (cnt >= k) ans *= pow(j, cnt);
			if (n == 1) break;
		}
		cout << ans << endl;
	}
	return 0;
} 






![php伪协议 [SWPUCTF 2022 新生赛]ez_ez_php(revenge)](https://img-blog.csdnimg.cn/direct/d80521374d454cae894ddc833712d0a3.png)













