第一次提交的时候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;
}