题目
原题链接:B. T-primes
题意
只有三个能整除的数称为T素数,判断输入的是不是T素数。首先需要素数筛,T素数的3个可整除数必定为1、sqrt(N)、N,且sqrt(N)为素数。判断条件参考别人的思路。
代码
#include
using namespace std;
#define MAX 1000000
int s[MAX+1];
void isPrime()
{
s[0]=s[1]=1;
memset(s,0,sizeof(s));
for(int i=2;i<=MAX;i++){
if(!s[i]){
for(int j=i+i;j<=MAX;j+=i){
s[j]=1;
}
}
}
}
int main()
{
int n;
isPrime();
long long t;
scanf("%d",&n);
while(n--) {
scanf("%lld",&t);
long long tmp=sqrt(t)+0.5;
if(t>1 && tmp*tmp==t && s[tmp]==0)//t>1这个条件可变,比如3
printf("YES\n");
else
printf("NO\n");
}
return 0;
}