題目
原題鏈接:B. T-primes
題意
只有三個能整除的數稱為T素數,判斷輸入的是不是T素數哥桥。首先需要素數篩碍沐,T素數的3個可整除數必定為1狸捅、sqrt(N)、N累提,且sqrt(N)為素數尘喝。判斷條件參考別人的思路。
代碼
#include<bits/stdc++.h>
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;
}