输入n,输入n个数,判断平方根是不是质数,是则输出“YES”,不是则输出“NO”。注意数据范围。
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
const int maxn=1000100;
bool num[maxn];
inline void prime()
{
memset(num,false,sizeof(num));
for(int i=2;i*i<=maxn;i++)
{
if(num[i]==false)
{
for(int j=i*2;j<=maxn;j+=i)
num[j]=true;
}
}
}
inline bool judge(long long int x)
{
if(x==1) return false;
long long int y=(long long)sqrt(x);
if(y*y!=x||num[y]) return false;
else return true;
}
int main()
{
int n;
cin>>n;
long long int a;
prime();
while(n--)
{
cin>>a;
if(judge(a))
cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}