CodeFoeces-230B

题目

原题链接: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;
}

你可能感兴趣的:(CodeFoeces-230B)