#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN = 5010;
int len;
bool is_prime[MAXN];
int prime[MAXN];
int num[MAXN];
int p[MAXN];
void Linear_sieve(){ //ÏßÐÔɸ
for(int i = 2; i < MAXN; i++){
is_prime[i] = true;
}
for(int i = 2; i < MAXN; i++){
if(is_prime[i]){
len++;
prime[len] = p[i] = i;
}
for(int j = 1; j <= len && i * prime[j] < MAXN; j++){
p[i * prime[j]] = max(p[i], prime[j]);
is_prime[i * prime[j]] = false;
if(i % prime[j] == 0){
break;
}
}
}
}
int split(int x){
for(int i = 1; i <= len; i++){
while(x % prime[i] == 0){
x /= prime[i];
num[i]++;
}
if(x < prime[i]){
break;
}
}
return x;
}
signed main(){
// freopen("split.in", "r", stdin);
// freopen("split.out", "w", stdout);
Linear_sieve();
int T;
scanf("%lld", &T);
while(T--){
int a;
bool flag = true;
scanf("%lld", &a);
for(int i = 1; i <= len; i++){
num[i] = 0;
}
int t = split(a);
for(int i = 1; i <= len; i++){
if(num[i] == 1){
flag = false;
}
}
if(t != 1){
int _2 = sqrt(t);
int _3 = cbrt(t);
if(_2 * _2 != t && _3 * _3 * _3 != t){
flag = false;
}
}
if(flag){
printf("yes\n");
}
else{
printf("no\n");
}
}
return 0;
}