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
解题思路:
延用上一题《质因数分解》的思路,判断它是否只能分解为两个 素数 相乘(且它们的指数为1)即可。(一更,谢谢同学的指出18行的判断是多余的,确实是的,当时还是沿用 质因数分解 的思想写的题解,就考虑 最后x=1,n = p^x*q^y*1 (x = y = 1) 这种情况,就直接写进去了,实际上这判断条件是不存在的)
AC代码:
#include <stdio.h>
int main()
{
int k,x,i,j;
scanf("%d",&k);
while ( k --)
{
int a = 0;
int index[5] = {0};
scanf("%d",&x);
for ( i = 2; i*i <= x; i ++)
{
for (j = 0; x%i == 0; j ++) x /= i;
if (j > 0) index[a++] = j;
if (a > 2) break; // 有第三个质因数,不符合题意,跳出循环
}
// if (index[0] == 1 && index[1] == 1 && index[2] == 0 && x == 1) puts ("Yes");
if (index[0] == 1 && index[1] == 0 && x != 1) puts ("Yes");
else puts ("No");
}
return 0;
}
博客给出解题思路,延用《质因数分解》思路,判断是否只能分解为两个素数相乘且指数为1。还提到之前题解中一处判断多余,最后给出了AC代码。
1306

被折叠的 条评论
为什么被折叠?



