给一个数,看其是否能分解为两个质数相乘的形式。
可以直接枚举数m的因子i,看其是否为质数,然后判断m/i是否也为质数即可。
或者可以预先打表筛出35000内的质数,然后枚举。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
bool isprime(int x)
{
if(x==2) return 1;
if(x%2==0) return 0;
for(int i=3;i*i<=x;i+=2)
{
if(x%i) continue;
return 0;
}
return 1;
}
int main()
{
int n,m;
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
int i,flag=0;
for(i=2;i*i<=m;++i)
if(isprime(i)&&m%i==0&&isprime(m/i)) {flag=1;break;}
if(flag) puts("Yes");
else puts("No");
}
return 0;
}