计算星期几
要知道几十天以后的某一天是星期几,这是不难的,因为只要计算一下被7除的余数就可以了。但是,如果要知道几十年以后的某一天是星期几,那就比较困难了,因为在这段时间里有闰年,而且,每个月所含的天数也不一样。在这一节,我们要给出一个
,可以方便地解决这个问题。
按现行的公历历法,每年有365天,若这一年是闰年,则有366天,二月有二十九天。闰年是这样确定的:公元年份数不被100整除但被4整除,或者年份数被400整除。
如果某一年是闰年,这一年的二月比正常年份的二月多一天,这样,从这一年的三月一日开始,星期数都受到这闰月的影响,同时,这一年的一月和二月里的星期数却不受影响。这样,就使得同一年里的计算有些不方便。所以,为了计算方便,我们把三月一日作为计算星期数的基点。
1600年以来,全世界大部分地区使用现行的公历历法。因此,我们考虑一个从1600年起使用的计算星期几的公式。
以下,我们使用记号:
N = 100c , y
示年份,其中0 , y , 99;
m表示月份,m = 1表示三月,m = 2表示四月,? ?,m = 12表示二月;
d(m)表示第N年m月1日的星期数。 N
假设d(1)是已知的,我们首先计算d(1),即第N年3月1日的星期数。1600N
我们知道:如果没有闰月,一年有365天,因为
365 , 1 (mod 7),
所以,每过一个正常年,星期数就增加1;每过一个闰年,星期数就增加2。
以r表示从1600年到N年的闰年数,我们得到
d(1) , d(1) , N – 1600 , r (mod 7)。 (1) N1600
由闰年的确定方法,我们有
100c,y,1600100c,y,1600100c,y,1600r,,, [][][]4100400
yy100c,y ,25c,[],400,c,[],16,[],44100400
yy100c,y (2) ,[],24c,[],[],388。4100400
设c = 4q , s,0 , s , 3,那么,由于0 , y , 99,100s , y < 400,所以
y100s,y[],0,[]= 0, 100400
因此,由式(2)得到
y400q,100s,y r,[],24c,[],3884400
y ,[],24c,q,3884
yc , (3) ,[],24c,[],38844
d(1),d(1),N,1600,r N1600
yc ,d(1),100c,y,1600,[],24c,[],388160044
yc (4) (1)2[][](mod7)。,d,c,y,,160044
为了确定d(1)的数值,我们把一个已知的数据代人式(4),例如,我们知1600
道1998年3月1日是星期日,即d(1) , 0 (mod 7),代人式(4),得到 1998
9819[],[]0 , d(1) , 2,19 , 98 ,, d(1) , 4 (mod 7), 1600160044
所以d(1) , 3,即1600年的3月1日是星期三。将这个数值代人式(4),得到 1600
yc,[][]d(1) , 3 , 2c , y ,(mod 7)。 (5) N44
现在,我们已经能够计算N年的3月1日是星期几。剩下的问题是如何计算这一年的m月k日是星期几。
我们先计算d(m),即N年m月1日的星期数。容易知道: N
3 月是31天,所以 d(2) , d(1) , 3 (mod 7), NN
4 月是30天,所以 d(3) , d(1) , 5 (mod 7), NN
5 月是31天,所以 d(4) , d(1) , 8 (mod 7), NN
6 月是30天,所以 d(5) , d(1) , 10 (mod 7), NN
7 月是31天,所以 d(6) , d(1) , 13 (mod 7), NN
8 月是31天,所以 d(7) , d(1) , 16 (mod 7), NN
9 月是30天,所以 d(8) , d(1) , 18 (mod 7), NN
10月是31天,所以 d(9) , d(1) , 21 (mod 7), NN
11月是30天,所以d(10) , d(1) , 23 (mod 7), NN
12月是31天,所以d(11) , d(1) , 26 (mod 7), NN
1 月是31天,所以d(12) , d(1) , 29 (mod 7)。 NN
现在,计算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(m) , d(1) , {[2.6m , 0.2] , 2 }(mod 7)。 NN
因此,N年m月k日的星期数W(N, m, k)是
W(N, m, k) = d(m) + k , 1 , d(1) , [2.6m , 0.2] , k – 3 (mod 7), NN
由式(5),得到
ycW(N, m, k) , k , 2c , y ,,[][], [2.6m , 0.2] (mod 7)。 (6) 44
利用上式我们就能较容易地计算出任意给定的N年m月k日的星期数的星期数W(N, m, k)了。
问:1976年8月6日是星期几, 例1
解 将N = 1976,c = 19,y = 76,m = 6,k = 6代入式(6),得到
7619W(1976, 6, 6) , 6 – 38 , 76 ,[],[], [2.6,6 – 0.2] , 5 (mod 7), 44
即1976年8月6日是星期五。
例2 问:1978年2月24日是星期几,
解 将N = 1977,c = 19,y = 77,m = 12,k = 24代入式(6),得到
7719) , 24 – 38 , 77 ,[],[], [2.6,12 – 0.2] , 5 (mod 7), W(1977,12,2444
即1978年2月24日是星期五。
注意,由例2我们看到,一月和二月分别是作为上一年的十一月和十二月。
习 题 一
1. 问:1948年2月14日是星期几,
问:1999年10月1日是星期几, 2.