計算公元某年某月某日是星期幾

我們知道,公曆的平年是365天,閏年是366天,置閏的方法是能被4整除的年份在2月加一天,但能被100整除的不閏,能被400整除的又閏;因此,像1600、2000、2400年都是閏年,而1700、1800、1900、2100年都是平年,公元前1年,按公曆也是閏年。因此,對於從公元前1年(或公元0年)12月31日到某一日子的年份Y之間的所有整年中的閏年數,就等於  
  [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400]   
  [...]表示只取整數部分,第一項表示需要加上被4整除的年份數,第二項表示需要去掉被100整除的年份數,第三項表示需要再加上被400整除的年份數;之所以Y要減一是爲了去掉輸入的這一年。這樣,我們就得到了第一個計算某一天是星期幾的公式:   
  W = (Y-1)*365 + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D. (1)   
  其中D是這個日子在這一年中的累積天數,算出來的W就是公元前1年(或公元0年)12月31日到你輸入的這一天之間的間隔日數;把W用7除,餘數是幾,這一天就是星期幾。比如我們來算2004年5月1日:   
  W = (2004-1)*365 + [(2004-1)/4] - [(2004-1)/100] + [(2004-1)/400] + (31+29+31+30+1) = 731702   
  731702 / 7 = 104528……6,餘數爲六,說明這一天是星期六,這和事實是符合的。   
  上面的公式(1)雖然很準確,但是計算出來的數字太大了,使用起來很不方便。仔細想想,其實這個間隔天數W的用數僅僅是爲了得到它除以7之後的餘數。這啓發我們是不是可以簡化這個W值,只要找一個和它餘數相同的較小的數來代替,用數論上的術語來說,就是找一個和它同餘的較小的正整數,照樣可以計算出準確的星期數。   
  顯然,W這麼大的原因是因爲公式中的第一項(Y-1)*365太大了。其實,(Y-1)*365 = (Y-1) * (364+1) = (Y-1) * (7*52+1)= 52 * (Y-1) * 7 + (Y-1)   
  這個結果的第一項是一個7的倍數,除以7餘數爲0,因此(Y-1)*365除以7的餘數其實就等於Y-1除以7的餘數。這個關係可以表示爲:(Y-1)*365 ≡ Y-1 (mod 7)
  其中,≡是數論中表示同餘的符號,mod 7的意思是指在用7作模數(也就是除數)的情況下≡號兩邊的數是同餘的。因此,完全可以用(Y-1)代替(Y-1)*365,這樣我們就得到了那個著名的、也是最常見到的計算星期幾的公式:   
  W = (Y-1) + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D. (2)
W除以7所得的餘數是幾那一天就是星期幾。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章