计算星期几问题的数学模型
2017-01-20何守元
何守元
摘 要: 本文应用数论的同余理论和高斯函数,建立计算任意给定的公元m年n月k日星期数的数学模型.
关键词: 计算 星期几 数学模型
要求几十天后是星期几,只需计算被7除所得余数即可.但要求任意的公元m年n月k日是星期几,就比较麻烦.因为有闰年,需要建立一个便于计算的数学模型.
公元1600年以来,全世界大部分地区都使用现行公历历法.平年有365天,二月有28天.闰年则有366天,二月有29天.除二月外,平年、闰年的其他月份,小月各有30天,大月各有31天.闰年的确定:公元年份数能被4整除但不能被100整除,或者能被400整除,这些年份为闰年,其他均不闰.如果某年是闰年,其二月比平年的二月多一天,从该年的三月一日开始,星期数都受到影响,但一月、二月里的星期数不受影响.因此,我们把三月一日作为计算星期数的基点.为讨论方便,先约定记号:
m=100x+y表示年份,其中0≤y≤99;n表示月份,3≤n≤14,其中n=13表示m+1年的1月,n=14表示m+1年的2月;k表示日期,w(m,n-2,k)表示公元m年n月k日的星期数.分三步建立数学模型:
第一步:先建立“计算公元m年3月1日星期数”的数学模型.要找到从1600年起使用的计算w(m,3-2,1)即“公元m年3月1日的星期数”的公式,先假设w(1600,3-2,1)是已知的,由数论知识知:365≡1(mod7),故每过一个平年,星期数就增加1;每过一个闰年,星期数就增加2.若用s表示从公元1600年到公元m年的闰年数,立得:w(m,3-2,1)≡w(1600,3-2,1)+(m-1600)+s(mod7).(1)
由闰年的确定方法,根据数论中高斯函数的定义知:
(其中:m=100x+y)(5)
第二步:再建立“计算公元m年n月1日星期数”的数学模型.注意到本文开头n的取值约定,考虑到大、小月天数,容易知道m年其余各月的星期数:
4月1日的星期数为:w(m,4-2,1)≡w(m,3-2,1)+3(mod7);5月1日的星期数为:w(m,5-2,1)≡w(m,4-2,1)+5(mod7);6月1日的星期数为:w(m,6-2,1)≡w(m,5-2,1)+8(mod7);7月1日的星期数为:w(m,7-2,1)≡w(m,6-2,1)+10(mod7);8月1日的星期数为:w(m,8-2,1)≡w(m,7-2,1)+13(mod7);9月1日的星期数为:w(m,9-2,1)≡w(m,8-2,1)+16(mod7);10月1日的星期数为:w(m,10-2,1)≡w(m,9-2,1)+18(mod7);11月1日的星期数为:w(m,11-2,1)≡w(m,10-2,1)+21(mod7);12月1日的星期数为:w(m,12-2,1)≡w(m,11-2,1)+23(mod7),
而m+1年1月1日的星期数为:w(m,13-2,1)≡w(m,12-2,1)+26(mod7),
m+1年2月1日的星期数为:w(m,14-2,1)≡w(m,13-2,1)+29(mod7).
由上可知,从m年3月1日到m+1年2月1日的11个月中,星期数“增加”了29天,平均每月“增加”约2.6天.构造高斯函数:f(n-2)=[2.6(n-2)-0.2]-2,经过验证,发现它完全满足这些条件:f(3-2)=0,f(4-2)=3,f(5-2)=5,…,f(14-2)=29.从而得到“计算公元m年n月1日星期数”的数学模型:w(m,n-2,1)≡w(m,3-2,1)+[2.6(n-2)-0.2]-2(mod7).
第三步:最终建立“计算m年n月k日星期数”的数学模型.显然,m年n月k日的星期数是:w(m,n-2,k)≡(m年n月1日的星期数)+(k-1)≡w(m,3-2,1)+[2.6(n-2)-0.2]+(k–3)(mod7),由(5)式,立得“计算m年n月k日星期数”的数学模型:
w(m,n-2,k)≡k+5x+y+[2.6(n-2)-0.2](mod7) (6)
(m=100x+y,3≤n≤14,其中:n=13表示m+1年的1月,n=14表示m+1年的2月.)
特别注意:①计算公元m年1月k日和2月k日的星期数(即n=13,14)时,(6)式中的年份数要用m-1,而不是m.②公式中的中括号表示高斯函数,其值取整数部分.
例问:公元2018年2月24日是星期几?
解:因为2月对应n=14,所以对应的年份数m=2018-1=2017,x=20,y=17,k=24,代入(6)式,得:
w(2017,14-2,24)≡24+5×20+17+[2.6×(14-2)–0.2]≡6(mod7),
即2018年2月24日是星期六.
参考文献:
[1]王进明主编.初等数论[M].人民教育出版社,2002.12,第一版.