心算某一天是星期几——康威裁决日算法

英国数学家约翰·霍顿·康威在1972年,发明了一个十分简易的,可以心算某一天是星期几的算法。本人尝试了一下,确实非常简易,因此介绍给大家。

(上图:数学家约翰·何顿·康威 / John Horton Conway,1937年12月26日-2020年4月11日)

基本原理:当我们知道某一个月某天是星期几时,在推算当月其他某天是星期几会非常容易。比如,如果已知:2021年5月21日是星期五,则:可知21±7天的日子都是星期五,比如5月28日,5月14日。要计算其他日子,则只要“就近”推算即可。

比如:要计算5月31日是星期几。因为5月28日是星期5,则31号是28号后面3天,则31号是星期“5+3”=星期“8”=星期1。

再比如要计算5月1日是星期几。因为知道5月21日是星期5,21-7-7-7=0。所以5月”0″日是星期5,则5月1日是星期6。

知道以上基本原理后,我们知道:只要能够对某年1-12月中,都能找到一天确切知道它是星期几,则可以快速推算出当年任何一天是星期几。因此需要找出这样12个日期。

又因为,一年中,2月最特殊,且其长度可变,因此康威把2月的最后一天作为2月的特殊日子,称其为“Doomsday”。Doomsday原意是“末日”,我翻译它为“裁决日”,因为基督教的教义中,Doomsday会发生“末日裁决”,且这一天确实也起到了裁决作用。

接下来,我们希望在其他每个月也找一个“裁决日”,我们希望它总是与2月的最后一天的星期数相同,且容易记忆。康威帮我们找出了这样一些日期:

对偶数月:4月4日,6月6日,8月8日,10月10日,12月12日。这一组十分容易记忆。

奇数月:1月的最后一天(1月31日,闰年为“1月32日”),3月7日,5月9日,9月5日,7月11日,11月7日。对这一组日期,我用这个口诀记忆:

“每年1月2月的最后一天和女神节的前一天,我会朝9晚5的在7-11便利店打工”。(请自行体会这句口诀与上述日期的关系)

以上这组日期被称为“裁决日”,它们的特点是:它们的星期数总是相同的,无论是哪一年!(请查看手机日历确认。)对2021年,裁决日是星期日(可以记忆为星期7或星期0)。

那么,推算2021年某天是星期几就很容易了,比如推算教师节9月10日是星期几:

根据口诀中的”朝九晚五“,可知9月5日是裁决日,则为星期日。9月10日是5日后面的5天,所以是“星期日+5”=星期5。

以上完成了对今年所有日子的,心算星期数的方法介绍。要计算其他上世纪和本世纪的其他年份,需要些额外的计算。基本思路与之前的思路类似,先背出某个基础年份的裁决日星期数,再计算目标年份与基础年份的“偏移量”,由此得此目标年份的裁决日的星期数。基础年份取每个世纪的第一年,因此先把1900年和2000年的裁决日的星期数背出来:

1900年的裁决日是星期3。2000年的裁决日是星期2。

然后要计算目标年份的“偏移量”。介绍两个算法,康威的原版算法,:

  1. 取年份后两位(比如2021年,取“21”)
  2. 除以12,求商和余数(21➗12=1余9)
  3. 余数除以4求商(余数忽略,9➗4商是2)
  4. 以上三个相加,即“偏移量”(1+9+2=12)
  5. 偏移量+基准年,模7,即为结果(12+星期2=“星期14”,所以2021年裁决日是星期日)

2010年,有人提出一个改进的“奇+11算法”,心算更为便利。该算法如下:

  1. 取年份后两位。(比如2021年,取“21”)
  2. 判断该数字是否为奇数,若是奇数则加11,偶数则不操作。(21+11=32)
  3. 将数字除以2. (32/2=16)
  4. 判断该数字是否为奇数,若是奇数则加11,偶数则不操作。(16不变)
  5. 将数字除以7,求余数(16/7余2)
  6. 用7减去这个数字,即为偏移量。(7-2=5。星期2+5=星期日,所以2021年裁决日是星期日)

最后举两个例子:

例1:北京奥运会开幕是在2008年8月8日,这一天是星期几?

用康威算法:8/12=0余8,8除以4,商2。0+8+2=10,为偏移量。2000年裁决日是周二,所以2008年裁决日是:星期2+10=星期12=星期5。8月8日恰为裁决日,所以2008年8月8日是星期5。

例2:2020年1月1日星期几?

用“奇+11算法”:20是偶数,20/2=10,10/7余3。7-3=4,即为偏移量。所以2020年裁决日是:星期2+4=星期6。

注意到2020年是闰年,所以1月裁决日为1月32日,可得:1月(32-28)日=1月4日,是星期6。1月1日是1月4日前面3天,所以1月1日是:星期6-3=星期3。

福利:康威裁决日算法速记卡

喜马拉雅FM:https://www.ximalaya.com/keji/6310606/

微信关注:dalaoli_shuxue

B站: https://space.bilibili.com/423722633

知乎:https://zhuanlan.zhihu.com/dalaoli-shuxue/

电邮 :dalaoliliaoshuxue@gmail.com