满分题解.
有参考了其他大佬的代码,只是疑惑为什么最大因子为200,如果不加 i>200 break;这个条件 整个代码就只能得80分。
#include <bits/stdc++.h>
long long q,n,k,ans;
int zhi(long long i)
{
int j;
for(j=2;j<=sqrt(i);j++){
if(i%j==0) return 0;
}
return 1;
}
void f(long long n,long long k)
{
ans=1;
int i=2;
while(n>1){
if(i>200) break; //因子大于200就可以结束了
int cnt=0;
if(zhi(i)==1){
while(n%i==0){
n/=i;
cnt++;
}
}
if(cnt>=k) ans*=pow(i,cnt);
i++;
}
return ;
}
int main()
{
scanf("%lld",&q);
while(q--){
scanf("%lld %lld",&n,&k);
f(n,k);
printf("%lld\n",ans);
}
return 0;
}