Sicily T-primes

Description
We know that prime numbers are positive integers that have exactly two distinct positive divisors. 

Similarly, we'll call a positive integer t Т-prime, if t has exactly three distinct positive divisors。

You are given an array of n positive integers. For each of them determine whether it is Т-prime or not.

Input
The first line contains a single positive integer, n (1?≤?n?≤?10000),showing how many numbers are in the array. 

The next line contains n space-separated integers xi (1?≤?xi?≤?10^12).

Output
Print one line: The number of T-primes number

Sample Input
 Copy sample input to clipboard
3
4 5 6
Sample Output
1
Hint
Please use long long instead of int for any Xi.

The given test has three numbers. 

The first number 4 has exactly three divisors — 1, 2 and 4. 

The second number 5 has two divisors (1 and 5), 

The third number 6 has four divisors (1, 2, 3, 6),

hence the answer for them is 1 (only the number 4 is T-primes number).

 

思路:题就是判断一个数是否仅含有3个因子,其实也就是除了1和它自身外,还存在另一个因子。如果找到这个另外的因子就输出yes,否则为no。数据范围1e15,不小了 ,

一个数n是T素数,一定是1,n,sqrt(n),且sqrt(n)为素数

也就是如果一个数是素数的平方,那么这个数有且仅有三个因子。

 

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,i,j;
	long long a,b;
	cin>>n;
	for(i=1;i<=n;i++)
	{
		cin>>a;
		b = sqrt(a);
		for(j=2; j*j <= b; j++) {	
			if(b%j == 0){ 
				break;  //判断根号后的a即b是不是素数
			}
		}
		if(j*j > b && b*b == a && a>1){
			cout<<"YES"<<endl;
		}
		else{
			cout<<"NO"<<endl;
		}
	}
	return 0;
}

  

posted @ 2019-02-17 16:20  陈墨cacm  阅读(143)  评论(0编辑  收藏  举报