当前位置:文档之家› 计算星期几

计算星期几

计算星期几
要知道几十天以后的某一天是星期几,这是不难的,因为只要计算一下被7除的余数就可以了。

但是,如果要知道几十年以后的某一天是星期几,那就比较困难了,因为在这段时间里有闰年,而且,每个月所含的天数也不一样。

在这一节,我们要给出一个公式,可以方便地解决这个问题。

按现行的公历历法,每年有365天,若这一年是闰年,则有366天,二月有二十九天。

闰年是这样确定的:公元年份数不被100整除但被4整除,或者年份数被400整除。

如果某一年是闰年,这一年的二月比正常年份的二月多一天,这样,从这一年的三月一日开始,星期数都受到这闰月的影响,同时,这一年的一月和二月里的星期数却不受影响。

这样,就使得同一年里的计算有些不方便。

所以,为了计算方便,我们把三月一日作为计算星期数的基点。

1600年以来,全世界大部分地区使用现行的公历历法。

因此,我们考虑一个从1600年起使用的计算星期几的公式。

以下,我们使用记号:
N = 100c + y 表示年份,其中0 ≤ y ≤ 99;
m 表示月份,m = 1表示三月,m = 2表示四月, ,m = 12表示二月; d N (m )表示第N 年m 月1日的星期数。

假设d 1600(1)是已知的,我们首先计算d N (1),即第N 年3月1日的星期数。

我们知道:如果没有闰月,一年有365天,因为
365 ≡ 1 (mod 7),
所以,每过一个正常年,星期数就增加1;每过一个闰年,星期数就增加2。

以r 表示从1600年到N 年的闰年数,我们得到
d N (1) ≡ d 1600(1) + N – 1600 + r (mod 7)。

(1)
由闰年的确定方法,我们有
][][][
400
1600
100100
1600
10041600
100-+
+-+
--+=y c y c y c r
4400
10016100
400
4
25][][
][-+++---+=y c y c y c。

388400
100100
244
][][
][-++-+=y c y c y (2)
设c = 4q + s ,0 ≤ s ≤ 3,那么,由于0 ≤ y ≤ 99,100s + y < 400,所以
][
][
400
1000100
y s y +=,= 0,
因此,由式(2)得到
388400
100400244
][][
-++++=y s q c y r
388244
][
-++=q c y
388]4
[244
][
-++=c c y , (3)
r N d d N +-+≡1600)1()1(1600
3884
244
1600100)1(][][1600-+++-++≡c
c y y c d。

)7(m o d 4
4
2)1(][][
1600c y y c d +++-≡ (4) 为了确定d 1600(1)的数值,我们把一个已知的数据代人式(4),例如,我们知
道1998年3月1日是星期日,即d 1998(1) ≡ 0 (mod 7),代人式(4),得到
0 ≡ d 1600(1) - 2⋅19 + 98 +][
][
4194
98+≡ d 1600(1) + 4 (mod 7),
所以d 1600(1) = 3,即1600年的3月1日是星期三。

将这个数值代人式(4),得到
d N (1) ≡ 3 - 2c + y +][][
44
c
y +(mod 7)。

(5)
现在,我们已经能够计算N 年的3月1日是星期几。

剩下的问题是如何计算这一年的m 月k 日是星期几。

我们先计算d N (m ),即N 年m 月1日的星期数。

容易知道:
3 月是31天,所以 d N (2) ≡ d N (1) + 3 (mod 7),
4 月是30天,所以 d N (3) ≡ d N (1) +
5 (mod 7), 5 月是31天,所以 d N (4) ≡ d N (1) + 8 (mod 7),
6 月是30天,所以 d N (5) ≡ d N (1) + 10 (mod 7),
7 月是31天,所以 d N (6) ≡ d N (1) + 13 (mod 7),
8 月是31天,所以 d N (7) ≡ d N (1) + 16 (mod 7),
9 月是30天,所以 d N (8) ≡ d N (1) + 18 (mod 7), 10月是31天,所以 d N (9) ≡ d N (1) + 21 (mod 7), 11月是30天,所以d N (10) ≡ d N (1) + 23 (mod 7), 12月是31天,所以d N (11) ≡ d N (1) + 26 (mod 7), 1 月是31天,所以d N (12) ≡ d N (1) + 29 (mod 7)。

现在,计算N 年m 月k 日的星期数已经是很容易的事了。

但是,我们希望找一个更简单的公式。

从上面的数字可以看出,从3月1日到2月1日的11个月中,星期数“增加”了29天,平均每月“增加”2.6天,因此,我们来找一个形如[2.6m - a ]的公式,其中m 是月份,a 是某个适当的数。

经过验证,发现函数
f (m ) = [2.6m - 0.2] - 2满足这些条件:
f (1) = 0,f (2) = 3,f (3) = 5,f (4) = 8, ,f (12) = 29。

利用这个函数,我们得到N 年m 月1日的星期数是
d N (m ) ≡ d N (1) + {[2.6m - 0.2] - 2 }(mod 7)。

因此,N 年m 月k 日的星期数W (N , m , k )是
W (N , m , k ) = d N (m ) + k - 1 ≡ d N (1) + [2.6m - 0.2] + k – 3 (mod 7),
由式(5),得到
W (N , m , k ) ≡ k - 2c + y +][][4
4
c y
++ [2.6m - 0.2] (mod 7)。

(6)
利用上式我们就能较容易地计算出任意给定的N 年m 月k 日的星期数的星期数W (N , m , k )了。

例1 问:1976年8月6日是星期几?
解 将N = 1976,c = 19,y = 76,m = 6,k = 6代入式(6),得到
W (1976, 6, 6) ≡ 6 – 38 + 76 +][
][
4
194
76++ [2.6⋅6 – 0.2] ≡ 5 (mod 7),
即1976年8月6日是星期五。

例2 问:1978年2月24日是星期几?
解 将N = 1977,c = 19,y = 77,m = 12,k = 24代入式(6),得到
W (1977,12,24) ≡ 24 – 38 + 77 +][
][
4
194
77++ [2.6⋅12 – 0.2] ≡ 5 (mod 7),
即1978年2月24日是星期五。

注意,由例2我们看到,一月和二月分别是作为上一年的十一月和十二月。

习 题 一
1. 问:1948年2月14日是星期几?
2. 问:1999年10月1日是星期几?。

相关主题