很好玩的一道题
int prime[MAXN],cnt;
bool st[MAXN];//为假,是素数
void get_prime(int n)
{
cnt=0;
for(int i = 2; i<= n; ++i)
{
if(!st[i]) prime[cnt++] = i;
for(int j=0;prime[j]*i<=n;++j)
{
st[prime[j]*i] = true;
if(i%prime[j]==0) break;
}
}
}
ll solve()
{
ll n,ans=1;;cin>>n;
rep(i,cnt)
{
int m=0;
while(n%prime[i]==0)
{
n/=prime[i], ++m;
if(m==3) ans*=prime[i],m=0;
}
}
ll l=1,r=1e6;
while(l<=r)
{
ll mid=(l+r)>>1;
if(mid*mid*mid==n)
{
ans*=mid;
return ans;
}
if(mid*mid*mid<n) l=mid+1;
else r=mid-1;
}
return ans;
}
signed main()
{
int T;cin>>T;
get_prime(MAXN-10);
while(T--) cout<<solve()<<endl;
return 0;
}