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