当前位置:   article > 正文

质数天(字符串年份的分解+质数判断)_c++素数日期

c++素数日期

我们将所有日期为质数的天数定义为质数天。 例如:2019年8月23日我们可以写成20190823,我们很容易发现这是一个质数。但我们的质数天同时还需要满足

20190823

0190823

190823

90823

0823

823

23

3

以上数均为质数,我们才称作质数天。我们想知道从21世纪 30世纪(2000年1月1日至2999年12月31日)有多少个质数天。

 AC CODE

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int f[8] = {1, 10000000, 1000000, 100000, 10000, 1000, 100, 10};
  4. //不是闰年
  5. int nr[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  6. //是闰年
  7. int yr[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  8. int ans;
  9. bool is_runyear(int y)
  10. {
  11. return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
  12. }
  13. bool is_prime(int x)
  14. {
  15. if (x == 0 || x == 1)
  16. return false;
  17. int tag = 1;
  18. int k = sqrt(x);
  19. for (int i = 2; i <= k; i++)
  20. {
  21. if (x % i == 0)
  22. {
  23. tag = 0;
  24. break;
  25. }
  26. }
  27. if (tag)
  28. return true;
  29. else
  30. return false;
  31. }
  32. void jc(int x)
  33. {
  34. int tmp, cnt = 0;
  35. for (int i = 0; i < 8; i++)
  36. {
  37. if (i == 0)
  38. tmp = x;
  39. else
  40. tmp = x % f[i];
  41. if (is_prime(tmp))
  42. cnt++;
  43. }
  44. if (cnt == 8)
  45. {
  46. cout << x << " ";
  47. ans++;
  48. if (ans % 5 == 0)
  49. cout << endl;
  50. }
  51. }
  52. int main()
  53. {
  54. for (int i = 20000101; i <= 29991231; i++)
  55. {
  56. int y = i / 10000;
  57. int m = i % 10000 / 100;
  58. int d = i % 100;
  59. if (m == 0 || m > 12 || d == 0 || d > 31)
  60. continue;
  61. if (is_runyear(y))
  62. {
  63. if (d <= yr[m])
  64. jc(i);
  65. }
  66. else
  67. {
  68. if (d <= nr[m])
  69. jc(i);
  70. }
  71. }
  72. cout << ans;
  73. return 0;
  74. }

Output

  1. 20000107 20000503 20010223 20010313 20031223
  2. 20060107 20070823 20100907 20130223 20190523
  3. 20190823 20300317 20360317 20400307 20400823
  4. 20480107 20600317 20660617 20700103 20700223
  5. 20700307 20700523 20721013 20910103 20930113
  6. 21000313 21000907 21050503 21320107 21330313
  7. 21360223 21870223 21890107 21990523 23000617
  8. 23010313 23100313 23970313 24021013 24050503
  9. 24090907 24270223 24350503 24501223 24900307
  10. 26001013 26070313 26150503 26190313 26931013
  11. 27020113 27080107 29331013
  12. 53

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

闽ICP备14008679号