当前位置:   article > 正文

cf230BCodeforces Round #142 (Div. 2)B_codeforce 230b

codeforce 230b

B. T-primes

time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

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 ≤ 105), showing how many numbers are in the array. The next line contains n space-separated integers xi (1 ≤ xi ≤ 1012).

Please, do not use the %lld specifier to read or write 64-bit integers in С++. It is advised to use the cin, cout streams or the %I64d specifier.

Output

Print n lines: the i-th line should contain "YES" (without the quotes), if number xi is Т-prime, and "NO" (without the quotes), if it isn't.

Examples

input

Copy

3
4 5 6

output

Copy

YES
NO
NO

Note

https://codeforces.com/contest/230/problem/B

The given test has three numbers. The first number 4 has exactly three divisors — 1, 2 and 4, thus the answer for this number is "YES". The second number 5 has two divisors (1 and 5), and the third number 6 has four divisors (1, 2, 3, 6), hence the answer for them is "NO".

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=1e6+10;
  4. long long t,x;
  5. long long primes[N],cnt;
  6. bool st[N];
  7. void getprime(long long n)
  8. {
  9. memset(st,false,sizeof st);
  10. st[1]=true;
  11. for(int i=2;i<=n;i++)
  12. {
  13. if(!st[i])
  14. {
  15. primes[cnt++]=i;
  16. }
  17. for(int j=0;primes[j]<=n/i;j++)
  18. {
  19. st[primes[j]*i]=true;
  20. if(i%primes[j]==0)
  21. break;
  22. }
  23. }
  24. }
  25. /* void getprime(long long n)//试除法也ac了
  26. {
  27. memset(st,false,sizeof st);
  28. st[1]=true;
  29. for(int i=2;i<=n;i++)
  30. {
  31. if(!st[i])
  32. {
  33. primes[cnt++]=i;
  34. }
  35. for(int j=i+i;j<=n;j+=i)
  36. st[j]=true;
  37. }
  38. }*/
  39. int main()
  40. {
  41. cin>>t;
  42. getprime(1e6);
  43. while(t--)
  44. {
  45. cin>>x;
  46. long long c=round(sqrt(x));//四舍五入
  47. if(c*c==x&&!st[c])
  48. cout<<"YES"<<endl;
  49. else
  50. {
  51. cout<<"NO"<<endl;
  52. }
  53. }
  54. }

题目就是要除了本身和1,开方后是质数的话,就是t-primes,借鉴了一位大佬的思路,先把1e6内的素数用线性筛找出来存素数数组内,蒟蒻的我一直用试除法一个个数去判断....才tle了,还有开方那里,数字很大,得四舍五入。

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

闽ICP备14008679号