【科学美国人】如何心算任意一个日期是星期几?

发布: | 发布时间:2011-10-19,星期三 | 阅读:2,954
译者:idle | 原作者: Chamberlain Fong

DAY GAME: Several mathematicians have developed perpetual calendar algorithms to calculate the day of the week for an arbitrary date, past or future.Image: © iStockphoto/Sandy Jones

最后一天是星期几?如何心算任意日期是星期几?

所谓末日算法是使用心算和助记符快速而巧妙的得出结果。脑筋急转弯:1752年9月6日是星期几?

张伯伦·冯 2011年10月18日

无论过去还是现在,总有一个宗教狂热份子宣称末日就要来临了。最近的例子就是末日论者康平了。他曾宣称2011年5月21日就是审判日,(还宣称)10月21日这个世界将终结。如果我们知道世界末日是星期几不是很有意思吗,毕竟,如果那天是星期二,我们又何必去上班呢?

很容易就能知道10月21日是星期五,而且很多人会告诉你5月21日是星期六——考虑到这些日期相对来说都很近。真正的挑战是知道历史上任意一天是星期几。一个人通常不会在意一个日子尚久的世界末日。

在一本书里提到1994年?,康平宣称那年9月6日是世界末日。那天过去了,什么都没有发生。但是,那天是星期几?既然我们在讨论这个问题,何不提高赌注把日历往前翻几个世纪:1752年的那一天在英格兰和它的美洲殖民地又是星期几?

仙境算法

刘易斯·卡罗尔在写小说比如《爱丽丝仙境奇遇记》之前可是搞数学的。其中一个成果就是1887年万年历算法,可以对给定日期计算星期几。其实在他之前就有很多类似算法了。伟大的数学家高斯1800年就创造过一个。但是卡罗尔的算法确实第一个适合心算的。他自己就能在20秒内心算出一个给定日期是星期几。

多年后,科学美国的长期专栏作家马丁·加德纳读到卡罗尔的万年历算法。(除了广受欢迎的“数学游戏”专栏,他还是一个严肃的卡罗尔学者。)加德纳把卡罗尔的算法告诉了他的朋友约翰·康威,并要求康威给出一个更简单的。之后在1973年,康威,这个世界级的数学家给出了一个他称为“末日规则”的简单算法。

末日规则更广为人知的名字是末日算法。这个算法如此简单以致只需要简单运算。更重要的是,它不需要记太多东西。经过练习后,它就可以抛开纸笔用心算在数秒之内得出结论。康威的简历中提到,1999年,科学美国人的马克·阿尔伯特写到,康威自己编了一个提供随即日期的程序,然后他可以在两秒内给出它们是星期几。

译注:
本文还有一部分,因为在第一次粘贴原文时忘记了,后来补上时又发现在译文内容编辑框内找不到第二部分原文。因此在这里将本文分为两部分译出。第二部分稍后呈上。

终结将至

尽管这个算法在追溯康平和其他预言的错误推测日期上有用的,但是末日算法对未来的启示却是毫无帮助。康威将这个能够计算给定日期的算法命名为“末日算法”,但是这个“末日”明显属用词不当。我们可以简单的将之称为“锚日”。

让这个算法技巧之处在于,对于给定的一年来说,某些特定的日期总是属于相同的星期几。比如,2011年的4月4日,6月6日,8月8日,10月10日和12月12日都是星期一。甚至,检查日历你会发现这些日子在其他年份也总属于相同的星期几。比如,1994年它们也都是星期一。康威利用这个事实作为算法的基础。这些上面日期共同所属的星期几就是“锚日”。(锚日属于星期几年年都是变化的)

其他一些落在锚日可记的日子包括:5月9日,9月5日,7月11日和11月7日,它们在1994年和2011年都是星期一。4月4日,6月6日,8月8日,10月10日和12月12日很容易记住,因为月份和日期相同。同样使用康威的简单口诀也可以记住这四个日子:“在7-11早9晚5的工作”。使用这些日期,一个人可以很容易的推断出相近日期属于星期几。(还有一些其他技巧去帮助记住一年头几个月的日子,比如,二月的最后一天总是锚日,不管平年还是闰年。)例如,我们已知1994年9月5日是星期一,很容易的推断出1994年9月6日——平安无事的康平世界末日——是星期二。在末日算法中使用最近的锚日是关键。

锚的变化

同一日期每年属于星期几都是变化的。2010年10月21日是星期四,2011年则是星期五——如果世界在那天并没毁灭,那么2012年的10月21日是星期天,2013年则是星期一。其中必然有规律可循。确实,对于一个给定的日期,每年属于哪个星期几总是后移一天,闰年除外,后移两天。有一个简单的数学公式来计算从世纪初开始的星期年度移位。虽然公式很简单,但是抛开纸笔还是不容易。刘易斯·卡罗尔发现了一个替代公式用于心算。事实上,康威在他的末日算法中重用了卡罗尔的方法。

去年空军理工学院的迈克尔和我找到了另一种计算星期年度移位。我们相信它要比卡罗尔的心算法更简单,因为我们的方法只需要一点点除法和记忆。我们称之为Odd+11方法,它的大致流程如下图。

1752年9月6日到底是星期几?要回答这个问题,需要知道一点我们当前日历的历史。地球每年绕其轴线自传365.24219次,也就是我们所知的太阳年。太阳年的天数总是多出一点点。我们现在一年分12月的做法始于约公元前45年的儒略历。儒略历将太阳年划为365.25天,闰年366天,每四年一次。这种近似使儒略历准确工作了几百年,但是累计的误差也越来越大。到1582年,儒略历日期对季节出现了数天的不同步。罗马教皇格里高利十三世授权改革历法。他的格里高利历法(公历)中将太阳年定为365.2425天,教皇从而修正了确定闰年的规则:同时被100和400整除的年份还是闰年。比如,2000年是闰年,但是1900年不是。因为1900不能被400整除。

格里高利历法(公历)直到很久以后都未被世界采用。事实上,英国和他的殖民地直到1752年才采纳。那时儒略历对季节的偏差已到了11天。为了和公历同步,1752年9月2日星期三后面是1752年9月14日星期四。因此1752年9月6日在英国和美国历史上是不存在的。一个不存在的日期自然也就没有星期几。如果你觉得夏令时让你迷惑,试试忽略一天有多少小时。

关于作者:

张伯伦·冯是一个计算机工程师,生活在旧金山。他拥有数学和电子工程学位。他从科学美国人的马丁·加德纳专栏获益良多。



 

版权声明

文章编辑: ( 点击名字查看他发布的更多文章 )
文章标题:【科学美国人】如何心算任意一个日期是星期几?
文章链接:http://ccdigs.info/11434.html

分类: IT观察, 科技视野, 科技驿站, 趣味科技.
标签: , , ,

发表评论