菜农星期公式的推导过程及与其他星期公式的比对

目前星期公式在网上流传的有三个:

1.蔡勒星期公式:

星期=百年/4-2*百年+年+年/4+13*(月+1)/5+日-1

菜农将其化简为:

星期=(203+百年/4-2*百年+年+年/4+(13*月+8)/5+日)%7

2.基姆拉尔森星期公式:

W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7

菜农将其化简为:

星期=(百年/4+百年*5+年+年/4+(13*月+8)/5+日)%7

3.菜农星期公式:

星期=((百年%4)*5+年+年/4+(13*月+8)/5+日)%7

其中:

百年=0~99,年=0~99,月=1~12,日=1~28/29/30/31

当月=1或2时,月=月+12或月=月+4,年=年-1

菜农是在不知道有星期公式的前提下独立推导出来的,网上有菜农当时推导的过程及推想。星期公式中最难推导的就是那个“13”。刚找到当年(13*M+8)/5)推导过程的“手稿”。它要从月星期表说起。

通用星期偏差表(此表是菜农公式中的(13*M+8)/5)分组

大 小 大 小 大 大 小 大 小 大 大 小 大 小 大

闰年 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 13月 14月 3月 4月 5月

天数 31 29 31 30 31 30 31 31 30 31 30 31 32 29 32 30 31

星期 5 1 2 5 0 3 5 1 4 6 2 4 0 3 5 1 3

星期差 3 2 3 2 3 3 2 3 2 3 3 2 3 2 3

分组 大 小 大 小 大 大 小 大 小 大 大 小 大 小 大

平年 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 13月 14月 3月 4月 5月

天数 31 28 31 30 31 30 31 31 30 31 30 31 32 28 32 30 31

星期 6 2 2 5 0 3 5 1 4 6 2 4 0 3 5 1 3

星期差 3 2 3 2 3 3 2 3 2 3 3 2 3 2 3

由于明年的1月(就是今年的13月)和今年5月的月表值都是0,2月(就是今年的14月)和今年6月的月表值都是3,故月表(只有10个月,三月是基月)简化为:

通用星期偏差表(此表是菜农公式中的(13*M+8)/5)

分组 大 小 大 小 大 大 小 大 小 大

年 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 1月 2月

天数 31 30 31 30 31 31 30 31 30 31 31 28/29

星期值 2 5 0 3 5 1 4 6 2 4

星期差 3 2 3 2 3 3 2 3 2 3

可以看出"分组"为两组(大月小月大月小月大月),每5(记住这个"5")个月1组(注意1月2月划归为5月6月,三月是基月,一共只有10个月):

3月 4月 5月 6月 7月 和 8月 9月 10月 11月 12月

星期差同为:3 2 3 2 3

星期差求和=3+2+3+2+3=13(记住这个"13")

再对12个月的星期值求和=0+3+2+5+0+3+5+1+4+6+2+4=40

由于每5个月1组,则40/5=8(记住这个"8")

因为原查表算法为:

某日星期几=(百年%4*5+年+年/4+月星期表+日)%7

所以要琢磨出: 月星期表 = ((13*M+8)/5)%7。

因为每5个月1组,故肯定有((aM+b)/5)%7或((aM+b)%5)%7存在。

但是((aM+b)%5)%7可化简为(aM+b)%5,结果只有0,1,2,3,4.这肯定不过!!!

所以((aM+b)/5)%7将是推导的框架!!!

哈哈~~~"5"用到了。该"13"和"8"上阵了。

参数只有a,b.代入((aM+b)/5)%7几次即可搞定((13*M+8)/5)%7~~~

我们可以看到三个星期公式的组成和区别:

1.百年(日期/100)

蔡勒星期公式有:203+百年/4-2*百年

基姆拉尔森星期公式有:百年/4+百年*5

菜农星期公式有:(百年%4)*5

2.年(日期%100)三个公式都有:年+年/4

3.月日三个公式都有:(13*月+8)/5+日

可以看出三个公式最大的不同点在于百年的算法构成大不一样。

蔡勒星期公式中的“-2*百年”最为独特,真不明白在干什么。其次是基姆拉尔森星期公式中的“百年*5”,有5的倍数的身影。

而菜农星期公式中的“(百年%4)*5”或(百年&3)*5构成了0,5,10,15,0,5,10,15,...序列。

并且((百年%4)*5)%7又构成了我们需要0,5,3,1,0,5,3,1,...序列。

蔡勒星期公式需要0,5,3,1,0,5,3,1,...序列

基姆拉尔森星期公式有0,5,10,15,0,5,10,15,...序列的念头

而菜农星期公式两个序列都满足,即百年的计算核心实际就是0,5,10,15,0,5,10,15,...序列!!!

在数学中,(百年%4)*5=(百年*5)%20,即都能得到0,5,10,15,0,5,10,15,...序列

前两个星期公式都是200年前数学家推导出来,而菜农星期公式是用近代的计算机编程思想推导出来的,非常简单和运算快捷。

例如:

(百年%4)*5=(百年&3)*5=(百年&3)<<2|(百年&3)

可以看到计算器内部只用了三种运算:&(与)|(或)<

菜农的"推导过程"绝对气晕数学教授,网上有三个星期公式的验证程序,已经流传十数年,应用很广。


分享到:


相關文章: