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 |
思路分析:循环尝试
#include<stdio.h>
#include <iostream>
using namespace::std;
int main()
{
int k;
scanf("%d", &k);
while (k--) {
int n,m,p,q,flag;
scanf("%d", &n);
flag = 0;
for ( p = 2; p * p< n; p++) {//找寻数p,如果p方等于n就与题意不符
if (n % p == 0 )
{
m = n/p;
flag = 1;//因为我们是从质数2开始,所以能被2整除,之后4就不用考虑了,36先会被3整除,那么就不用考虑6了,因为你都会被3整除了,就一定会被6整除
// 假设是4,4能被2整除,那么立马就会进入if,所以一个循环,如果从小到大除,但凡是合数,那么第一个循环除的一定是质数,而下一个循环里,如果能被
//除清,就说明数字除了p之后的数字n不是质数,因为如果除了p之后,要满足题意输出yes,那么除了p之后的n一定是质数,质数就不能被除清
for (q = 2; q*q <= m; q++) {
if (m % q == 0) {
flag = 0;
break;
}
}
break;
}
}
if (flag == 1) {
printf("Yes\n");
}
else if(flag == 0)
{
printf("No\n");
}
}
}