快速切题 sgu113 Nearly prime numbers 难度:0

113. Nearly prime numbers

time limit per test: 0.25 sec. 
memory limit per test: 4096 KB

 

Nearly prime number is an integer positive number for which it is possible to find such primes P1 and P2 that given number is equal to P1*P2. There is given a sequence on N integer positive numbers, you are to write a program that prints “Yes” if given number is nearly prime and “No” otherwise.

 

Input

Input file consists of N+1 numbers. First is positive integer N (1£N£10). Next N numbers followed by N. Each number is not greater than 109. All numbers separated by whitespace(s).

 

Output

Write a line in output file for each number of given sequence. Write “Yes” in it if given number is nearly prime and “No” in other case.

 

Sample Input

1

6

Sample Output

Yes

思路:nearly prime数只能有两个质因数
#include <cstdio>

#include <cstring>

#include <cmath>

using namespace std;

int n,num;

bool nearlyprime(){

    int cnt=0;

    int r=sqrt((double)num);

    if((num&1)==0){

        while((num&1)==0){

            num>>=1;

            cnt++;

            if(cnt>2)return false;

        }

    }

    for(int i=3;i<=r;i+=2){

        if(num%i==0){

            while(num%i==0){

                num/=i;

                cnt++;

                if(cnt>2)return false;

            }

        }

    }

    if(num!=1)cnt++;

    return cnt==2;

}

int main(){

    scanf("%d",&n);

    for(int i=0;i<n;i++){

        scanf("%d",&num);

        if(nearlyprime())puts("Yes");

        else puts("No");

    }

    return 0;

}

  

你可能感兴趣的:(number)