找回密码
 欢迎注册
楼主: nyy

[擂台] 找出所有的生日素数!

[复制链接]
发表于 2022-10-21 09:24:03 | 显示全部楼层
儒略历和格里历转换太复杂,就从1600年开始一直到9999年
  1. #include <gmp.h>
  2. #include <iostream>

  3. using namespace std;

  4. int isprime(unsigned long n)
  5. {
  6.   if (n % 2 == 0)
  7.     return 0;
  8.   if (n % 3 == 0)
  9.     return 0;
  10.   if (n % 5 == 0)
  11.     return 0;
  12.   if (n % 7 == 0)
  13.     return 0;
  14.   if (n % 11 == 0)
  15.     return 0;
  16.   if (n % 13 == 0)
  17.     return 0;
  18.   if (n % 17 == 0)
  19.     return 0;
  20.   if (n % 19 == 0)
  21.     return 0;
  22.   mpz_t z;
  23.   mpz_init_set_ui(z, n);
  24.   return mpz_probab_prime_p(z, 4);
  25. }

  26. int main( void )
  27. {
  28.   unsigned long y, m, d, n;
  29.   for (y = 1600; y <= 9999; y ++)
  30.     for (m = 1; m <= 12; m ++)
  31.         for (d = 1; d <= 31; d ++)
  32.         {
  33.             if ((m == 4) || (m == 6) || (m == 9) || (m == 11))
  34.                 if (d > 30)
  35.                   continue;
  36.             if (y % 4 != 0)
  37.             {
  38.                 if (d > 28)
  39.                   continue;
  40.             }       
  41.             else
  42.                 if ((y % 100 != 0) || (y % 400 == 0))
  43.                 {
  44.                    if (d > 29)
  45.                      continue;
  46.                 }
  47.                 else
  48.                   if (d > 28)
  49.                     continue;

  50.             n = 10000 * y + 100 * m + d;
  51.             int r = isprime(n);
  52.             if (r != 0)
  53.             {
  54.               if (r == 2)  
  55.                 cout << "生日素数" << n << endl;
  56.               else
  57.                 cout << "可能生日素数" << n << endl;
  58.             }
  59.         }
  60. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-17 07:20 , Processed in 0.039817 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表