题解 CF230B 【T-primes】

看到好多大佬用了埃氏筛 or 线性筛,本蒟蒻表示没有这个必要(一来太麻烦,暴力能过;二来嘛……我不会呀)

那么我们来讲讲暴力

T质数包含三个不同因子,那么那些书包含三个因子呢?

QwQ就是质数的平方啦~

所以我们只要判断一下这个数的平方根是否为质数就OK了

昨天的洛谷日报——《浅谈素数筛优化》中提到了一个小技巧,就是有关6的优化:除2、3外的任何质数,除以6的余数一定是1或5~~~

把这个小技巧用到程序里~~~

#include <bits/stdc++.h>
using namespace std;
bool ss(long long a)//判断素数QwQ
{
  if(a==1)return 0;
  if(a==2||a==3)return 1;
  if(a%6!=1&&a%6!=5)return 0;
  for(long long i=5; i<=sqrt(a); i+=6)
    if(a%i==0||a%(i+2)==0)return 0;
  return 1;
}
int main()
{
  long long n,k;//O(1)的空间QwQ
  cin>>n;
  for(int i=0; i<n; i++)
  {
    cin>>k;
    if(k==1)//特判(不加也AC)
    {
      printf("NO
");
      continue;//跳出当前循环变量(记得老师是这么讲的)
    }
    long long t=(int)sqrt(k);
    if(t==sqrt(k)&&ss(t))//QwQ这个就是判断
    	printf("YES
");
    else printf("NO
");
  }
  return 0;
}
原文地址:https://www.cnblogs.com/oierscw/p/12548491.html