D_Prime
1、题目内容
Description
题目描述
整数n=p*q,p和q为质数,且p≠q,我们称n为D-Prime,请写个程序判断一个数是不是D_Prime。
输入
第一行是一个整数K,表示样例的个数。以后每行是一个整数x,(1 ≤ x ≤ 100,000,000);
输出
每行输出一个样例的结果,如果是输出“Yes”,否则输出“No”。
样例输入
4
30
121
21
12
样例输出
No
No
Yes
No
2、题目分析
这个题目有个小地方特别坑,就是在判断素数的时候,我们尽量用乘就用乘,不要用开平方,乘比开平方要省时间。对D_Prime的判定,我们主要抓住第一个两个数不可以相等,另外,都要为素数。
3、参考代码
#include<stdio.h>
#include<math.h>
int judge(int x) //判断一个数是否为素数
{
if(x==1) return 0;
for(int i=2;i*i<=x;i++)
{
if(x%i==0)
{
return 0;
}
}
return 1;
}
int main()
{
int k;
scanf("%d",&k);
while(k--)
{
int flag=0;
int x;
scanf("%d",&x);
for(int i=2;i*i<x;i++) //最坑的地方就是这,采用开方绝对会错
{
if((x%i==0)&&judge(i)&&judge(x/i)) //这是判断语句,注意次序
{
flag=1;
break;
}
}
if(flag) printf("Yes\n");
else printf("No\n");
}
return 0;
}