您的位置:首页 > 其它

T-primes

2015-11-25 22:01 260 查看
Time Limit: 1sec    Memory Limit:256MB

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).

 

 

Problem Source: OYoung

  题解:此题的意思是判断输入的数字是否有且仅有3个因数(positive divisors),并记录满足条件的输入的个数。而我们不难发现,能满足条件的数字
N 的3个因数必然是: 1、√N 、N ,且 √N 要是整数。 这个题解条件不难解决,我们只需判断:pow([sqrt(N)],2)
是否等于 N就可以了。

然而问题又出现了,输入的数据有10^12之大,对输入的N进行循环判断必然会超时(Time
Limit Exceeded)。 因此我们不得不换个思路解决问题,我们要求满足条件的输入 N,对应的 √N 是整数。换句话说就是输入的数只能是自然数的平方形式( 即:4,9,16,25,36,49……),同时 √N
需要是素数(如4,9,25,49对应的2,3,5,7都是素数,而16,36对应的4,6不是素数),否则就会多于3个因数。(因为4*4=2*8 ,而7*7 != a*b )。

最后就是一个小坑,要记得排除1,1并不是T-prime数。(本宝宝就被坑了)

本宝宝的码

06.
#include<iostream>


07.
#include<iomanip>


08.
#include<cmath>


09.
using
 
namespace
 
std;


10.
 

11.
int
 
main()


12.
{


13.
int
 
a[101],book[1001]={0};


14.
int
 
N;


15.
cin
>>N;


16.
int
 
max=0;


17.
for
(
int
 
i=0;i<N;i++){


18.
cin
>>a[i];


19.
book[a[i]]++;


20.
if
(book[a[i]]>max){


21.
max=book[a[i]];


22.
}


23.
}


24.
if
(N==1){


25.
cout
<<
"YES"
<<endl;


26.
}


27.
else
{


28.
if
(N%2
!= 0){


29.
if
(max
<= N/2+1){


30.
cout
<<
"YES"
 
<<endl;


31.
}


32.
else
{


33.
cout
<<
"NO"
 
<<endl;


34.
}


35.
}


36.
else
{


37.
if
(max
<= N/2){


38.
cout
<<
"YES"
 
<<endl;


39.
}


40.
else
{


41.
cout
<<
"NO"
 
<<endl;


42.
}


43.
}


44.
}


45.
return
 
0;


46.
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  T-primes