#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<int>pri;
bool bok[50000];
int main()
{
int lim = 46350;
int n;
for(int i=2;i<=lim;i++){
if(!bok[i])
{
pri.push_back(i);
for(int j = i+i;j<=lim;j+=i){
bok[j]=1;
}
}
}
scanf("%d",&n);
while(n--){
int t;
scanf("%d",&t);
if(t<2){
puts("No");
continue;
}
bool f=0;
for(int i=0;i<pri.size()&&1ll*pri[i]*pri[i]<=t;i++)
if(t%pri[i]==0){
f=1;
break;
}
if(f==1)puts("No");
else puts("Yes");
}
return 0;
}
虽然输入2^31 注意只需要筛除出sqrt(inputnumber)的范围的素数就够了
一个数的一半的因子只会落在sqrt(inputnumber)中 另一半大于sqrt的可以用除法除出来
2^31的sqrt 为 不超过46350的一个数 所以整体复杂度还是不高的