欧拉计划题-19 (蔡勒公式)

前言

欧拉计划是学习数学、数论选手遨游的海洋,700+道题让你我越来越强。
打卡网址链接: link.

一 题目描述

在这里插入图片描述
题目链接:link.

二 题解分析

1.暴力求解(低配版解法)

可以这样思考,首先外层套一个1901年到2000年的循环,依次判断是否是闰年。
齐次开辟一个大小为12的数组存放非闰年的每个月天数,同时falg变量标记是否为闰年,作为二月份的加1操作。
s初始化为1,因为1901.1.1为星期一,s每次加当月天数,并且mod7,结果就是对应星期几,s=0为星期日。

2.蔡勒公式(公式法)

第一次听到蔡勒公式还是大一,呢个时候啥也不懂,参加了学校的一次编程比赛,遇到这种日期问题,我直接跳,(鄙人不才,不清楚每个月有多少天,hhh),赛后耿佬和我提到了蔡勒公式。
今天又偶然刷到这种题,还真是一种怀念。
百度百科链接:link.
我就简单写个公式,感兴趣的同学,上方链接寻求真理。
在这里插入图片描述

三 题解代码

注:罗马教皇决定在1582年10月4日后使用格利戈里历法;而英国则是在1752年9月3日后才接受使用格利戈里历法。
咱也不知道171还是172对。
// An highlighted block
#include <iostream>
 using namespace std;
 int flag=1;
int cl(int y, int m, int d){
	if(m == 1 || m == 2){
		y--;
		m += 12;
	}
	int w;
	
	if(y==1582&&m==9&&d==3) flag=0;
	if(flag)
	w = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)% 7;
	else w = (d+2*m+3*(m+1)/5+y+y/4+5)% 7;
	return w;
}
int main(){
	int s = 0;
	for(int y = 1901; y <= 2000; y++){
		for(int m = 1; m <= 12; m++){
			if(cl(y, m, 1) == 6){ s++;}
		}
	}
cout<<s;
	return 0;
}

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数论只会a mod b

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值