C语言 计算2000年到3000年中有多少个日期之和为素数如2000年1月1日日期之和为4 不是素数
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/05 20:26:50
![C语言 计算2000年到3000年中有多少个日期之和为素数如2000年1月1日日期之和为4 不是素数](/uploads/image/z/5087543-23-3.jpg?t=C%E8%AF%AD%E8%A8%80+%E8%AE%A1%E7%AE%972000%E5%B9%B4%E5%88%B03000%E5%B9%B4%E4%B8%AD%E6%9C%89%E5%A4%9A%E5%B0%91%E4%B8%AA%E6%97%A5%E6%9C%9F%E4%B9%8B%E5%92%8C%E4%B8%BA%E7%B4%A0%E6%95%B0%E5%A6%822000%E5%B9%B41%E6%9C%881%E6%97%A5%E6%97%A5%E6%9C%9F%E4%B9%8B%E5%92%8C%E4%B8%BA4+%E4%B8%8D%E6%98%AF%E7%B4%A0%E6%95%B0)
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