当前位置:   article > 正文

[Codeforces] 230B - T-primes_code 230 b

code 230 b

根据题意,如果一个数N只有三个约数,那么它的约数一定分别是,1,N,sqrt(N)。也就是只有N / sqrt(N) 与 sqrt(N)相等的时候,他的约数才能是3个,否则就是4个了。

一开始直接写了个sqrt的素数判断,直接TLE了,随后换了个筛法过了……

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <math.h>
  4. #define MAXX 1000000
  5. int a[MAXX+1];
  6. void isPrime()
  7. {
  8. a[0] = a[1] = 1;
  9. memset(a, 0, sizeof(a));
  10. for(int i = 2; i <= MAXX; i++)
  11. {
  12. if(!a[i])
  13. {
  14. for(int j = i + i; j <= MAXX; j += i)
  15. {
  16. a[j] = 1;
  17. }
  18. }
  19. }
  20. }
  21. int main()
  22. {
  23. int n;
  24. long long ans;
  25. isPrime();
  26. scanf("%d", &n);
  27. while(n--)
  28. {
  29. scanf("%I64d", &ans);
  30. long long temp = sqrt(ans) + 0.5;
  31. if(ans > 1 && temp * temp == ans && a[temp] == 0)
  32. {
  33. printf("YES\n");
  34. }
  35. else
  36. {
  37. printf("NO\n");
  38. }
  39. }
  40. return 0;
  41. }


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

闽ICP备14008679号