题目链接:https://vjudge.net/problem/Gym-101243G
题意:给你一个数字,让你判断这个数字是否有3个不相等的素数相乘而组成
解析:打一个素数表,然后就扫一遍判断即可
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<string>
#include<bitset>
#include <vector>
using namespace std;
const int maxn=(10467397)/6;
int prime[maxn+100];
int pr[maxn+100];
int cnt;
void getprime()
{
for(int i=2;i<=maxn;i++)
{
if(!prime[i])
{
pr[cnt++]=i;
for(int j=2*i;j<=maxn;j+=i)
prime[j]=1;
}
}
}
int main()
{
freopen("Input.txt","r",stdin);
freopen("Output.txt","w",stdout);
cnt=0;
getprime();
//cout<<cnt<<endl;
int flag=0;
int n;
cin>>n;
int ct=0;
for(int i=0;i<cnt;i++)
{
if(n%pr[i]==0)
{
ct++;
n/=pr[i];
}
if(n%pr[i]==0)
{
flag=1;
break;
}
}
if(ct==3&&!flag&&n==1)
printf("YES\n");
else printf("NO\n");
return 0;
}