XTU-OJ 1139-D_Prime

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 

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 > 3)      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;
}

你可能感兴趣的:(湘大OJ练习解析,c语言,算法,数据结构)