- 注册时间
- 2008-2-6
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 51573
- 在线时间
- 小时
|
发表于 2022-10-21 09:24:03
|
显示全部楼层
儒略历和格里历转换太复杂,就从1600年开始一直到9999年
- #include <gmp.h>
- #include <iostream>
- using namespace std;
- int isprime(unsigned long n)
- {
- if (n % 2 == 0)
- return 0;
- if (n % 3 == 0)
- return 0;
- if (n % 5 == 0)
- return 0;
- if (n % 7 == 0)
- return 0;
- if (n % 11 == 0)
- return 0;
- if (n % 13 == 0)
- return 0;
- if (n % 17 == 0)
- return 0;
- if (n % 19 == 0)
- return 0;
- mpz_t z;
- mpz_init_set_ui(z, n);
- return mpz_probab_prime_p(z, 4);
- }
- int main( void )
- {
- unsigned long y, m, d, n;
- for (y = 1600; y <= 9999; y ++)
- for (m = 1; m <= 12; m ++)
- for (d = 1; d <= 31; d ++)
- {
- if ((m == 4) || (m == 6) || (m == 9) || (m == 11))
- if (d > 30)
- continue;
- if (y % 4 != 0)
- {
- if (d > 28)
- continue;
- }
- else
- if ((y % 100 != 0) || (y % 400 == 0))
- {
- if (d > 29)
- continue;
- }
- else
- if (d > 28)
- continue;
- n = 10000 * y + 100 * m + d;
- int r = isprime(n);
- if (r != 0)
- {
- if (r == 2)
- cout << "生日素数" << n << endl;
- else
- cout << "可能生日素数" << n << endl;
- }
- }
- }
复制代码 |
|