代码:
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long ll;
int t;
ll x,ans,len,prime[200010],cub[1000010];
bool vis[1000010];
void fill_c(int MAX = 1000000)
{
for(int i = 1;i <= MAX;i++)
cub[i] = i * i * i;
for(int i = 2;i <= MAX;i++)
{
if(!vis[i])
prime[++len] = i;
for(int j = 1;j <= len && i * prime[j] <= MAX;j++)
{
vis[i * prime[j]] = true;
if(i % prime[j] == 0)
break;
}
}
}
int main()
{
fill_c();
cin >> t;
while(t--)
{
ans = 1;
cin >> x;
for(int i = 1;i <= len && prime[i] * prime[i] <= x;i++)
{
int cnt = 0;
while(x % prime[i] == 0)
{
x /= prime[i];
cnt++;
if(cnt % 3 == 0)
ans *= prime[i];
}
}
ll tmp = lower_bound(cub + 1,cub + 1000001,x) - cub;
if(cub[tmp] == x)
ans *= tmp;
cout << ans << '\n';
}
return 0;
}