C语言 计算2000年到3000年中有多少个日期之和为素数如2000年1月1日日期之和为4 不是素数

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/19 15:20:44
C语言计算2000年到3000年中有多少个日期之和为素数如2000年1月1日日期之和为4不是素数C语言计算2000年到3000年中有多少个日期之和为素数如2000年1月1日日期之和为4不是素数C语言计

C语言 计算2000年到3000年中有多少个日期之和为素数如2000年1月1日日期之和为4 不是素数
C语言 计算2000年到3000年中有多少个日期之和为素数
如2000年1月1日日期之和为4 不是素数

C语言 计算2000年到3000年中有多少个日期之和为素数如2000年1月1日日期之和为4 不是素数
思路
对于年月日进行循环,对于每天算各位数字之和,判断是否是素数
由于素数判断次数比较多,需要判断1001*365=365414次,加上闰年的天数还要多一些,所以采用素数筛,而不是除法进行素数判断,从而增加效率

程序代码如下
#include
char prime_table[50];
void create_table()
{
int i, j;
for(i = 2; i < 50; i ++)
{
if(prime_table[i]) continue;
for(j = i*2; j < 50; j += i)
prime_table[j] = 1;
}
}
int is_prime(int i)
{
return !prime_table[i];
}
int day_of_month(int y, int m)
{
int m_table[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if(m != 2) return m_table[m-1];
if((y%4==0&&y%100!=0)||y%400==0) return 29;
return 28;
}
int main()
{
int y, m, d, cnt = 0, dom;
create_table();
for(y = 2000; y