第一次csp考试,考场上敲了一个小时只有80分,回家20分钟就AC了(int忘记改成long long了www)
#include<bits/stdc++.h>
using namespace std;
int su[100];
int a[100];
int main(){
int q;
cin>>q;
int find_su(long long index,long long time);
void find_a(long long index,long long time,int length);
for(int i=0;i<q;i++){
long long index,time;
cin>>index>>time;
int length=find_su(index,time);
find_a(index,time,length);
// for(int t=0;t<100;t++){
// cout<<su[t]<<" ";
// }
// cout<<endl;
// for(int t=0;t<100;t++){
// cout<<a[t]<<" ";
// }
// cout<<endl;
long long result=1;
for(int j=0;j<100;j++){
if(a[j]>=time&&su[j]!=0)
result*=(long long)pow(su[j],a[j]);
}
cout<<result<<endl;
}
// find_su(100,2);
}
int find_su(long long index,long long time){
for(int i=0;i<10000;i++){
su[i]=0;
}
int k=0;
int down=(int)pow(index,1.0/time);
for(int i=2;i<=down;i++){
int flag=0;
for(int j=2;j<=sqrt(i);j++){
if(i%j==0){
flag=1;
}
}
if(flag==0){
su[k++]=i;
}
}
return k;
}
void find_a(long long index,long long time,int length){\
for(int i=0;i<10000;i++){
a[i]=0;
}
int i=0;
while(index!=1){
for( i=0;i<length;i++){
if(index%su[i]==0){
// cout<<su[i]<<" ";
index/=su[i];
// cout<<index<<endl;
a[i]++;
i--;
}
}
if(i>=length){
break;
}
}
}