CodeFoeces-230B

题目

原题链接: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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容