Jul 312012
 

好多年前, 我看到过一个计算某年某月某日是星期几的公式, 一下子想不起来了, 只记得公式大概是什么结构, 有 “\(+\)”, 有 “\(-\)”, 等等. Google 了一下, 找出了这个公式, 现在写在这里, 做个档案.

公元 \(Y\) 年第 \(D\) 天是星期几, 即是

\[W=Y-1+\left[\frac{Y-1}4\right]-\left[\frac{Y-1}{100}\right]+\left[\frac{Y-1}{400}\right]+D\]

模 \(7\) 的余数. (这里 \(\left[x\right]\) 表示不超过 \(x\) 的最大整数)

比如, 你不记得今天是星期几了, 没关系, 拿起铅笔, 算一算, 很快就知道了: 今天是公元 \(2012\) 年 \(7\) 月 \(31\) 日, 那么 \(Y=2012, D=31+29+31+30+31+30+31.\) 算一下
\[2012-1+\left[\frac{2012-1}4\right]-\left[\frac{2012-1}{100}\right]+\left[\frac{2012-1}{400}\right]=2498, D=213,\]
因而
\[W=2498+213=2711\equiv2\pmod7,\]
于是 \(2012\) 年 \(7\) 月 \(31\) 日是星期二.

理解这个公式的关键在于: 每过一个平年, 把同一日期是星期几向后推 \(1\); 每过一个闰年, 把同一日期是星期几向后推 \(2\).

“星期制” 是把公元 \(1\) 年 \(1\) 月 \(1\) 日规定为星期一. 只要数一数从公元元年到这一年已经过了多少个平年, 多少个闰年, 就可算出从公元 \(1\) 年 \(1\) 月 \(1\) 日的星期一往后推了多少才到了这一年的元旦的星期几. 然后, 从这一年的元旦是星期几, 推算这一年的某一天是星期几, 只要算下过了多少天就行了.

具体说来, 公式中各部分的含义是:

  • \(Y-1\): 从公元元年开始已经过去的年数, 先按平年把元旦是星期几向后推 \(Y-1\);
  • \(\left[\dfrac{Y-1}4\right]\): 从公元元年开始已经过去了多少个 \(4\) 年, 按照”年份是 \(4\) 的倍数的一般都是闰年”的规定, 把元旦是星期几再向后推这么多;
  • \(\left[\dfrac{Y-1}{100}\right]\): 从公元元年开始已经过去了多少个 \(100\) 年, 按照“年份是 \(100\) 的倍数的一般不是闰年”的规定, 把向后多推的数减去;
  • \(\left[\dfrac{Y-1}{400}\right]\): 已经过去了多少个 \(400\) 年, 按照”年份是 \(400\) 的倍数的是闰年”的规定, 把多减去的数补上;
  • \(D\):  这一天是这一年的第几天.

于是, \(W\) 就是从公元元年元旦是星期一到这一天, 需要把星期几向后推的总数. 因之, \(W\) 模 \(7\) 的余数是几, 这一天就星期几.

 Posted by at 12:33 am

 Leave a Reply

(required)

(required)

This site uses Akismet to reduce spam. Learn how your comment data is processed.