已经调了三天,调疯了,全输出1。
#include<bits/stdc++.h>
using namespace std;
const int Maxn=pow(10,4.5),Maxm=1e6;
int n,ans[Maxn+5],cnt,p[Maxm+5];
bool prime[Maxn+5];
long long x;
void Prime(int n){
for(int i=2;i<=n;i++){
if(!prime[i])
ans[++cnt]=i;
for(int j=1;j<=cnt&&i*ans[j]<=n;j++){
prime[i*ans[j]]=1;
if(!(i%ans[j]))
break;
}
}
}
int main(){
scanf("%d",&n);
Prime(Maxn);
for(long long i=1;i*i*i<=1e18&&i<=Maxm;i++)
p[i]=i*i*i;
while(n--){
long long sum=1;
scanf("%lld",&x);
for(long long i=1;i<=cnt&&ans[cnt]<=x;i++){
int count=0;
while(!(x%ans[i])){
count++;
x/=ans[i];
if(count==3){
sum*=ans[i];
count=0;
}
}
}
long long k=lower_bound(p+1,p+Maxm+1,x)-p;
printf("%lld\n", sum*(k*k*k==x?k:1));
}
return 0;
}