rt,我觉得我赛时想复杂了(埃筛 + 递归)
#include <bits/stdc++.h>
#define int long long
using namespace std;
map<int,bool>pme;
void elursleve(int n){
pme[0] = pme[1] = true;
for(int i = 2;i <= sqrt(n);++i){
if(!pme[i]){
for(int j = i * i;j <= n;j += i){
pme[j] = true;
}
}
}
}
int a[15];
bool can(int val){
if(val == 1){
return false;
}
for(int i = 2;i <= val;++i){
if(val % i == 0){
int tm = val / i;
if(!pme[i] && !pme[tm]){
return true;
}
else{
return can(a[i]);
}
}
}
return false;
}
signed main(){
int t,sle = 0;
cin >> t;
for(int i = 1;i <= t;++i){
cin >> a[i];
sle = max(sle,a[i]);
}
elursleve(sle);
for(int i = 1;i <= t;++i){
if(a[i] % 2 == 0){
cout << "No" << endl;
}
else if(!pme[a[i]]){
cout << "Yes" << endl;
}
else{
if(can(a[i])){
cout << "Yes" << endl;
}
else{
cout << "No" << endl;
}
}
}
}