当前位置:   article > 正文

T-primes_we know that prime numbers are positive integers t

we know that prime numbers are positive integers that have exactly two disti

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/75151
推荐阅读
  

闽ICP备14008679号