分享

自己就是一本活日历—— 对蔡勒(Zeller)公式的改进

 清勤居士 2008-09-29
自己就是一本活日历—— 对蔡勒(Zeller)公式的改进
冯思琮
  

历史上的某一天是星期几?未来的某一天是星期几?关于这个问题,有很多计算公式(两个通用计算公式和一些分段计算公式),其中最著名的是蔡勒(Zeller)公式。即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

 

公式中的符号含义如下,w:星期;c:世纪;y:年(两位数);m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的12月要看作上一年的1314月来计算,比如200311日要看作2002年的131日来计算);d:日;[  ]代表取整,即只要整数部分。

 

相比于另外一个通用通用计算公式而言,蔡勒(Zeller)公式大大降低了计算的复杂度。为节约篇幅,本文中对另外一个通用通用计算公式不作讨论(读者感兴趣的话,可以参见杭州14中网站上的相关内容)。

 

不过,笔者给出的通用计算公式似乎更加简洁(包括运算过程)。现将公式列于其下:

W=[y/4]+r (y/7)-2r(c/4)+m+d

 

公式中的符号含义如下,r (  )代表取余,即只要余数部分;m’是m的修正数,现给出112月的修正数1’至12’如下:(1’,10’)=6;(2’,3’,11’)=2;(4’,7’)=55=06=38=1;(9’,12’)=4注意:在笔者给出的公式中,y为润年时1=52=1)。其他符号与蔡勒(Zeller)公式中的含义相同。

 

2049101日(100周年国庆)为例,分别用蔡勒(Zeller)公式和笔者给出的公式进行计算,过程如下:

蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

=49+[49/4]+[20/4]-2×20+[26× (10+1)/10]+1-1

=49+[12.25]+5-40+[28.6]

=49+12+5-40+28

=54  (除以75)

笔者给出的公式:  w=[y/4]+r (y/7)-2r(c/4)+m+d

                   = [49/4]+r (49/7)-2r(20/4)+10+1

                   =12+0-2×0+6+1

 =19    (除以75)

2049101日(100周年国庆)是星期5

 

你的生日(出生时、今年、明年)是星期几?不妨试一试。

 

另外,用笔者给出的公式,只需稍加训练 ,即可用心算(而用蔡勒公式进行心算是非常困难的)。

若只具体到某一年来进行计算就更为简单,比如说2003年,先用笔者给出的公式计算出前3项,不妨称之为年修正数,简记为Y2003 =3,我们在计算2003年的某一天(比如说是六一儿童节)是星期几时,直接将前3项一次代入,则w= Y2003+6+1=3+3+1=7(除以70,200361日是星期日。

 

顺便给出未来几年的年修正数:Y2004=5Y2005 =6Y2006 =0Y2007 =1Y2008 =3Y2009 =4Y2010 =5。其他年的修正数请用笔者所给公式的前3项自己计算。

不过,以上两个公式都只适合于15821015日之后的情形(当时的罗马教皇将恺撒大帝制订的儒略历修改成格里历,即今天使用的公历)。

 

 

比较:            蔡勒(Zeller)公式        笔者所给公式

1、公式项数          7                       5/4

2、运算次数         127次加减,5次乘除)  94次加减,4次乘除,1次映射)/6

3、运算过程最大数   390                      31

4、总项最大数       163                      67

5、对12月的处理  任何一年均要作特殊处理   仅闰才作特殊处理

 

12注释:对于20**年(包括16**年,24**年等),由于笔者所给公式的第3项为0,实际上在计算这些世纪时公式仅有4项、相应地运算次数只有6次。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多