蔡勒公式(巧妙计算星期几)
给出年月日,计算星期几--算法及算法来历
= 2524;
2524 / 7 = 360……4.这和实际是一致的。
公式(5)已经是从年、月、日来算星期几的公式了,但它还不是最简练的,对于年份的处理还有改进的方法。我们先来用这个公式算出每个世纪第一年3月1日的星期,列表如下:
因为其中的-7和(M-1)*28两项都可以被7整除,所以去掉这两项,W除以7的余数不变,公式变成:
W = (Y-1) + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + [ 13 * (M+1) / 5 ] + d.
(5)
D = [ 13 * (M+1) / 5 ] - 7 + (M-1) * 28 + d. (3≤M≤14) (4)
上面计算星期几的公式,也就可以进一步简化成:
W = (Y-1) + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + [ 13 * (M+1) / 5 ] - 7 + (M-1) * 28 + d.
(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这么大的原因是因为公式中的第一项(Y-1)*365太大了。其实,
判断具体某一天是星期几
最后写一个很有用的星期的介绍如何计算某一天是星期几?——蔡勒(Zeller)公式历史上的某一天是星期几?未来的某一天是星期几?关于这个问题,有很多计算公式(两个通用计算公式和一些分段计算公式),其中最著名的是蔡勒(Zeller)公式。
即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1公式中的符号含义如下,w:星期;c:世纪-1;y:年(两位数);m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。
(C 是世纪数减一,y是年份后两位,M是月份,d是日数。
1月和2月要按上一年的13月和14月来算,这时C和y均按上一年取值。
)算出来的W除以7,余数是几就是星期几。
如果余数是0,则为星期日。
以2049年10月1日(100周年国庆)为例,用蔡勒(Zeller)公式进行计算,过程如下:蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1=49+[49/4]+[20/4]-2×20+[26×(10+1)/10]+1-1=49+[12.25]+5-40+[28.6]=49+12+5-40+28=54 (除以7余5)即2049年10月1日(100周年国庆)是星期5。
你的生日(出生时、今年、明年)是星期几?不妨试一试。
不过,以上公式只适合于1582年10月15日之后的情形(当时的罗马教皇将恺撒大帝制订的儒略历修改成格里历,即今天使用的公历)。
过程的推导:(对推理不感兴趣的可略过不看)星期制度是一种有古老传统的制度。
据说因为《圣经·创世纪》中规定上帝用了六天时间创世纪,第七天休息,所以人们也就以七天为一个周期来安排自己的工作和生活,而星期日是休息日。
从实际的角度来讲,以七天为一个周期,长短也比较合适。
计算某天是星期几
计算某天是星期几(含六个例程)计算某天是星期几,最常见的公式: W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D Y是年份数,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天。
计算某天是星期几,最常见的公式:W=[Y-1]+[(Y-1)/4]-[(Y-1)/100]+[(Y-1)/400]+DY是年份数,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天。
最好用的是蔡勒公式:W=[C/4]-2C+y+[y/4]+[13*(M+1)/5]+d-1C是世纪数减一,y是年份后两位,M是月份,d是日数。
1月和2月要按上一年的13月和14月来算,这时C和y均按上一年取值。
两个公式中的[...]均指只取计算结果的整数部分。
算出来的W除以7,余数是几就是星期几。
如果余数是0,则为星期日。
星期制度是一种有古老传统的制度。
据说因为《圣经〃创世纪》中规定上帝用了六天时间创世纪,第七天休息,所以人们也就以七天为一个周期来安排自己的工作和生活,而星期日是休息日。
从实际的角度来讲,以七天为一个周期,长短也比较合适。
所以尽管中国的传统工作周期是十天(比如王勃《滕王阁序》中说的“十旬休暇”,即是指官员的工作每十日为一个周期,第十日休假),但后来也采取了西方的星期制度。
在日常生活中,我们常常遇到要知道某一天是星期几的问题。
有时候,我们还想知道历史上某一天是星期几。
通常,解决这个方法的有效办法是看日历,但是我们总不会随时随身带着日历,更不可能随时随身带着几千年的万年历。
假如是想在计算机编程中计算某一天是星期几,预先把一本万年历存进去就更不现实了。
这时候是不是有办法通过什么公式,从年月日推出这一天是星期几呢?答案是肯定的。
其实我们也常常在这样做。
我们先举一个简单的例子。
比如,知道了2004年5月1日是星期六,那么2004年5月31日“世界无烟日”是星期几就不难推算出来。
蔡勒公式——计算星期几
如何计算某一天是星期几?——蔡勒(Zeller)公式历史上的某一天是星期几?未来的某一天是星期几?关于这个问题,有很多计算公式(两个通用计算公式和一些分段计算公式),其中最著名的是蔡勒(Zeller)公式。
即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1公式中的符号含义如下,w:星期;c:世纪-1;y:年(两位数);m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。
(C是世纪数减一,y是年份后两位,M是月份,d是日数。
1月和2月要按上一年的13月和14月来算,这时C和y均按上一年取值。
)算出来的W除以7,余数是几就是星期几。
如果余数是0,则为星期日。
以2049年10月1日(100周年国庆)为例,用蔡勒(Zeller)公式进行计算,过程如下:蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1=49+[49/4]+[20/4]-2×20+[26× (10+1)/10]+1-1=49+[12.25]+5-40+[28.6]=49+12+5-40+28=54 (除以7余5)即2049年10月1日(100周年国庆)是星期5。
你的生日(出生时、今年、明年)是星期几?不妨试一试。
不过,以上公式只适合于1582年10月15日之后的情形(当时的罗马教皇将恺撒大帝制订的儒略历修改成格里历,即今天使用的公历)。
过程的推导:(对推理不感兴趣的可略过不看)星期制度是一种有古老传统的制度。
据说因为《圣经·创世纪》中规定上帝用了六天时间创世纪,第七天休息,所以人们也就以七天为一个周期来安排自己的工作和生活,而星期日是休息日。
从实际的角度来讲,以七天为一个周期,长短也比较合适。
所以尽管中国的传统工作周期是十天(比如王勃《滕王阁序》中说的“十旬休暇”,即是指官员的工作每十日为一个周期,第十日休假),但后来也采取了西方的星期制度。
蔡勒公式的推导过程
蔡勒公式的推导过程蔡勒公式是一种计算星期几的公式,被广泛应用于日历、时间和天文学等领域。
它基于一种数学方法,通过一系列简单的计算,能够快速准确地确定任意日期是星期几。
下面我们来看看蔡勒公式的推导过程。
我们需要了解一个基本概念:闰年。
闰年是指公历年份中除以4余数为0但除以100余数不为0或者除以400余数也为0的年份。
例如,2000年是闰年,1900年不是闰年。
接下来,我们来分析蔡勒公式的计算过程。
假设要计算的日期为YYYY年MM月DD日,我们首先需要将月份转换为“调整后的月份”(Adjusted Month)。
转换公式如下:若MM为1或2月,则将年份-1,月份变为13或14月,即:A = YYYY - 1B = 13 (或14)否则,A = YYYY,B = MM接下来,我们计算“世纪数”(Century)和“世纪年”(Century Year)。
世纪数的计算公式为:C = INT(A / 100)世纪年的计算公式为:D = A - 100 * C接着,我们计算“闰年修正值”(Leap Correction)和“世纪年修正值”(Century Year Correction)。
闰年修正值的计算公式为:E = INT(26 * (B + 1) / 10) - 2 * C + D + INT(D / 4) + INT(C / 4)世纪年修正值的计算公式为:F = 5 * C + D我们可以根据以下公式计算星期几(Weekday):Weekday = (E + F + DD) mod 7其中,DD为日期数。
mod表示取模运算。
通过以上的计算过程,我们可以快速准确地确定任意日期是星期几。
需要注意的是,蔡勒公式的计算结果中,0代表星期日,1代表星期一,以此类推,6代表星期六。
蔡勒公式是一种简单易用的计算星期几的公式,它的推导过程基于数学方法,通过一系列简单的计算,可以快速准确地确定任意日期是星期几。
在日历、时间和天文学等领域得到了广泛的应用。
万年历公立计算方法
元旦到5月1日经过的天数。第二段比较好算,它等于21*365+5=7670天,之所以要加
5,是因为这段时间内有5个闰年。第一段和第三段就比较麻烦了,比如第三段,需要把
5月之前的四个月的天数累加起来,再加上日期值,即31+29+31+30+1=122天。同理,第
的差值,余数就表示想算的日子的星期在确定的日子的星期之后多少天。如果余数是
0,就表示这两天的星期相同。显然,如果把这个作为“原点”的日子选为星期日,那
么余数正好就等于星期几,这样计算就更方便了。
但是直接计算两天之间的天数,还是不免繁琐。比如1982年7月29日和2004年5月
1日之间相隔7947天,就不是一下子能算出来的。它包括三段时间:一,1982年7月29
公式变成:
W = (Y-1) + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + [ 13 * (M+1) / 5 ] + d.
=49+[12.25]+5-40+[28.6]
=49+12+5-40+28
=54 (除以7余5)
即2049年10月1日(100周年国庆)是星期5。
你的生日(出生时、今年、明年)是星期几?不妨试一试。
不过,以上公式只适合于1582年10月15日之后的情形(当时的罗马教皇将恺撒大帝制订的儒略历修改成格里历,即今天使用的公历)。
公式中的符号含义如下,w:星期;c:世纪-1;y:年(两位数);m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。(C是世纪数减一,y是年份后两位,M是月份,d是日数。1月和2月要按上一年的13月和 14月来算,这时C和y均按上一年取值。)
zeller公式
zeller公式
Zeller公式是一种计算某一日期是星期几的方法。
它是由德国数学家克里斯蒂安·祖勒发明的,可以在不使用计算机的情况下快速计算出任意一天是星期几。
该公式的历史可以追溯到1800年前后,当时的祖勒发现了一些特殊的规律,从而推导出了这个公式。
Zeller公式的原理是基于蔡勒公式而来的。
蔡勒公式是计算公元年到某一年某一天是星期几的方法。
但是,蔡勒公式需要进行大量的乘法和加法运算,计算量相对较大。
而Zeller公式则采用了不同的算法,计算量相对较小。
Zeller公式的具体计算方法如下:
W = [C/4] - 2C + y + [y/4] + [13(m+1)/5] + d - 1
其中,W表示星期几,C表示世纪数,y表示该年份的后两位数字,m表示月份,d表示日期。
方括号表示向下取整。
需要注意的是,月份需要进行一些特殊处理,即1月和2月分别算作上一年的13月和14月,公式中的m要加上12,即W=[C/4]-2C+y+[y/4]+[13(m+1)/5]+d-1。
Zeller公式的计算过程并不复杂,但是需要进行多次计算,因此需要仔细地核对计算结果。
如果出现计算错误,可能会导致最终的结果出现偏差。
因此,在使用Zeller公式进行计算时,需要认真对待
每一个步骤,确保计算结果的准确性。
Zeller公式是一种非常实用的计算方法,可以方便地计算出任意一天是星期几。
虽然现在计算机已经普及,但是学习Zeller公式仍然具有很高的实用价值。
蔡勒(Zeller)公式及其推导:快速将任意日期转换为星期数
蔡勒(Zeller)公式及其推导:快速将任意⽇期转换为星期数0. 本⽂的初衷及蔡勒公式的⽤处前⼀段时间,我在准备北邮计算机考研复试的时候,做了⼏道与⽇期计算相关的题⽬,在这个过程中我接触到了蔡勒公式。
先简单的介绍⼀下蔡勒公式是⼲什么⽤的。
我们有时候会遇到这样的问题:看到⼀个⽇期想知道这⼀天是星期⼏,甚⾄看到⼀个历史⽇期或纪念⽇,我们想快速的知道这⼀天是星期⼏。
对于这个问题,如果⽤编程的⽅式,应该怎么实现呢?你可能已经有思路了,⽐如你知道某个⽇期是星期⼏,把这个⽇期作为原点,然后计算⽬标⽇期和这个原点之间相差多少天,再除以7 求余数,最后通过余数判断⽬标⽇期的星期数。
通过这样的过程,你确实可以得到正确的结果,但这不够快速也不够优雅。
对于这个问题,如果你懂得蔡勒公式,那就变得异常简单了,你只需要将年⽉⽇等数据代⼊公式,然后计算出结果,这⼀结果就是⽬标⽇期对应的星期数。
当我知道蔡勒公式之后,我觉得它⾮常有趣也很酷,所以我不仅希望掌握公式的使⽤,也希望可以掌握公式背后的推导过程。
然⽽,当我在⽹上搜索相关的⽂章时,我发现⼏乎所有向我展⽰的博客(从零⼏年到最近的 19 年)⼤多是转载、复制于这篇⽂章():星期制度是⼀种有古⽼传统的制度。
据说因为《圣经·创世纪》中规定上帝⽤了六天时间创世纪,第七天休息,所以⼈们也就以七天为⼀个周期来安排⾃⼰的⼯作和⽣活,⽽星期⽇是休息⽇……这篇⽂章质量很不错,讲解过程⾃然流畅,但是在⼀些细节上存在错误,有些推导步骤让⼈感到困惑。
因此,当我掌握蔡勒公式后,很希望可以将我的理解输出出来,让想要学习蔡勒公式推导过程的⼈看到⼀些新的材料。
好了,废话少说,我们开始吧。
1. 蔡勒公式的形式如果你对公式的推导过程不感兴趣,只是希望使⽤蔡勒公式,那么只看此⼩节即可。
蔡勒公式的形式如下:\[\begin{aligned} D &= \left[ \frac{c}{4} \right] - 2c + y + \left[ \frac{y}{4} \right] + \left[ \frac{13(m+1)}{5} \right] + d - 1 \\[2ex] W &= D \bmod 7 \end{aligned} \]其中:W 是星期数。
取模运算————数学
蔡勒(Zeller)公式,是一个计算星期的公式,随便给一个日期,就能用这个公式推算出是星期几W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1 或者是:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1w:星期; w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六 c:世纪-1(前两位数) y:年(后两位数) m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算)d:日 [ ]代表取整,即只要整数部分。
以下是星期计算公式的推导·不想要推导可以不看星期制度是一种有古老传统的制度。
据说因为《圣经·创世纪》中规定上帝用了六天时间创世纪,第七天休息,所以人们也就以七天为一个周期来安排自己的工作和生活,而星期日是休息日。
从实际的角度来讲,以七天为一个周期,长短也比较合适。
所以尽管中国的传统工作周期是十天(比如王勃《滕王阁序》中说的“十旬休暇”,即是指官员的工作每十日为一个周期,第十日休假),但后来也采取了西方的星期制度。
在日常生活中,我们常常遇到要知道某一天是星期几的问题。
有时候,我们还想知道历史上某一天是星期几。
通常,解决这个方法的有效办法是看日历,但是我们总不会随时随身带着日历,更不可能随时随身带着几千年的万年历。
假如是想在计算机编程中计算某一天是星期几,预先把一本万年历存进去就更不现实了。
这时候是不是有办法通过什么公式,从年月日推出这一天是星期几呢?答案是肯定的。
其实我们也常常在这样做。
我们先举一个简单的例子。
比如,知道了2004年5月1日是星期六,那么2004年5月31日“世界无烟日”是星期几就不难推算出来。
我们可以掰着指头从1日数到31日,同时数星期,最后可以数出5月31日是星期一。
蔡勒公式
蔡勒公式:w=y+【y/4】+【c/4】-2c+【26(m+1)/10】+d-1蔡勒公式只适合1582年10月15日之后的情形w:星期;c:世纪-1;y:年(年份的后两位数);m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看做上一年的13、14月来计算,比如2003年1月1日要看做2002年13月1日来计算);d:日;【】:代表取整,即只要整数部分。
w除以7,余数是几就是星期几,特殊的余数为0就是星期天。
例如:2049年10月1日(100周年国庆)w=y+【y/4】+【c/4】-2c+【26(m+1)/10】+d-1=49+【49/4】+【20/4】-2x20+【26x(10+1)/10】+1-1=49+【12.25】+5-40+【28.6】=49+12+5-40+28=5454/7=7 (5)即2049年10月1日是星期五还有几个计算公式:1.w=【y-1】+【(y-1)/4】-【(y-1)/100】+【(y-1)/400】+Dy是年份,D是这一天在这一年中的累积天数2.改进的蔡勒公式:W=【y/4】+r(y/7)-2r(c/4)+m’+dR()代表取模m’是m的修正数,其中(1’,10’)=6 (2’,3’,11’)=2 (4’,7’)=5 5’=0 6’=3 8’=1 (9’,12’)=4y是闰年时,1’=5 2’=13.w=(y-1)*365+【(y-1)/4】-【(y-1)/100】+【(y-1)/400】+DD是这个日子在这一年中的累积天数4.w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7d日数,m月份y年份(但必须把1、2月份看成上一年的13、14月份)注:4的mod你们学过没,大概意思就是(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)再除以7的余数Mod读作模《初等数论》里有这个知识点。
蔡勒公式(巧妙计算星期几)
对于计算星期数的公式还有如下的公式: 1.Week=(Day + 2*Month + 3*(Month+1)/5 + Year + Year/4 - Year/100 + Year/400) % 7 (其中的 Year 是四位数,如 2011。“%”号是等式除 7 取余数) 该式与蔡勒公式有点区别:“0”为星期 1,……,“6”为星期日! 该式可能与蔡勒公式的计算都是较为复杂,但有改进的地方:对于世纪 这个概念不被引用,直接就是计算年代数(4 位数)的,即不用再把 世纪 和 年代数(后两位)分开。 2.基姆拉尔森计算公式 W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 在公式中 d 表示日 期中的日数+1,m 表示月份数,y 表示年数。 注意:在公式中有个与其他公式不同的地方: 把一月和二月看成是上一年的十三月和十四月, 例:如果是 2011-1-10 则换算成:2010-13-10 来代入公式计算。 例:2011-10-17 计算时:d=18,m=10,y=2011。 Java 代码: string CaculateWeekDay(int y,int m, int d) { if(m==1) m=13; if(m==2) m=14; int week=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; string weekstr=""; switch(week) { case 1: weekstr="星期一"; break; case 2: weekstr="星期二"; break; case 3: weekstr="星期三"; break; case 4: weekstr="星期四"; break; case 5: weekstr="星期五"; break;
c语言嘉勒公式
c语言嘉勒公式
嘉勒(Zeller)公式是一个用于计算星期的公式。
给定一个日期,该公式可以推算出是星期几。
这个公式的核心公式是:
w=(y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1)%7
其中:
w 是星期几,对7取模可以得到0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六
y 是年份的后两位数,如果是公元前的年份且非整百数,y 应该等于cMOD100+100
c 是世纪,一般情况下取值为已经过去的世纪数,也就是年份除以一百的结果,而非正在进行的世纪,也就是现在常用的年份除以一百加一;不过如果年份是公元前的年份且非整百数的话,c 应该等于所在世纪的编号,如公元前253年,是公元前3世纪,c 就等于 -3
m 是月份,m 大于等于 3,小于等于 14,即在蔡勒公式中,某年的 1、2 月要看作上一年的 13、14 月来计算,比如 2003 年 1 月 1 日要看作 2002 年的 13 月 1 日来计算
d 是日期
注意:这个公式只适用于1582年10月15日之后的情形(当时的罗马教皇将恺撒大帝制订的儒略历修改成格里历,即今天使用的公历)。
算周几的数学问题
算周几的数学问题
算周几的数学问题是一种常见的数学问题,它通常涉及计算给定日期是星期几的问题。
这种问题可以锻炼人们的计算能力和逻辑思维能力。
解决算周几的问题的方法主要有两种:一种是使用日期计算公式,另一种是使用日历计算方法。
使用日期计算公式的方法通常比较繁琐,需要记住一些特定的公式和规则。
其中最常用的公式是蔡勒(Zeller)公式。
这个公式是由德国数学家蔡勒(Christian Zeller)在19世纪末提出的。
蔡勒公式可以根据给定的年、月、日计算出对应日期的星期几。
但是,由于公式过于复杂,应用范围有一定的限制,对于普通人来说并不是很方便。
另一种方法是使用日历计算。
这种方法相对来说比较简单直观,只需要根据给定的日期在日历上查找即可。
一般来说,人们都能很快地判断出给定日期是星期几。
这种方法无需记住复杂的公式,适合大多数人使用。
总的来说,算周几的数学问题对于培养人们的计算能力和逻辑思维能力有很大的帮助。
通过解决这类问题,可以提高人们的数学素养和解决问题的能力。
同时,这类问题也常常出现在考试和日常生活中,掌
握解决方法可以帮助人们更好地处理各种日期相关的事务。
判断某一天是星期几的算法
最后写一个很有用的星期的介绍如何计算某一天是星期几?——蔡勒(Zeller)公式历史上的某一天是星期几?未来的某一天是星期几?关于这个问题,有很多计算公式(两个通用计算公式和一些分段计算公式),其中最著名的是蔡勒(Zeller)公式。
即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1公式中的符号含义如下,w:星期;c:世纪-1;y:年(两位数);m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。
(C 是世纪数减一,y是年份后两位,M是月份,d是日数。
1月和2月要按上一年的13月和 14月来算,这时C和y均按上一年取值。
)算出来的W除以7,余数是几就是星期几。
如果余数是0,则为星期日。
以2049年10月1日(100周年国庆)为例,用蔡勒(Zeller)公式进行计算,过程如下:蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1=49+[49/4]+[20/4]-2×20+[26× (10+1)/10]+1-1=49+[12.25]+5-40+[28.6]=49+12+5-40+28=54 (除以7余5)即2049年10月1日(100周年国庆)是星期5。
你的生日(出生时、今年、明年)是星期几?不妨试一试。
不过,以上公式只适合于1582年10月15日之后的情形(当时的罗马教皇将恺撒大帝制订的儒略历修改成格里历,即今天使用的公历)。
过程的推导:(对推理不感兴趣的可略过不看)星期制度是一种有古老传统的制度。
据说因为《圣经·创世纪》中规定上帝用了六天时间创世纪,第七天休息,所以人们也就以七天为一个周期来安排自己的工作和生活,而星期日是休息日。
从实际的角度来讲,以七天为一个周期,长短也比较合适。
黑色星期五问题(蔡勒公式)
黑色星期五问题(蔡勒公式)在西方,星期五和数字 13 都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。
所以,不管哪个月的十三日又恰逢星期五就叫“黑色星期五”。
要求:输入年份,输出是:判断该年是否包含黑色星期五,如包含,给出具体日期蔡勒(zeller)公式:随便给一个日期,就能用这个公式推算出是星期几W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1(或者是:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1)若要计算的日期是在1582年10月4日或之前,公式则为w=y+[y/4]+[c/4]-2c+[13(m+1)/5]+d+2w:星期;w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六c:世纪(前两位数)y:年(后两位数)m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算)d:日利用泰勒公式求某一天是星期几:[cpp]view plaincopy利用蔡勒公式求特定年份有没有黑色星期五:[cpp]view plaincopy还可以检测是不是每一年都有黑色星期五:[cpp]view plaincopy经检测,从公元0年开始,确实是每一年都有黑色星期五。
如果不用蔡勒公式,那就比较复杂了,首先看当年有没有闰年。
求闰年的简单程序,计算显示出0~2012年的闰年:[cpp]view plaincopy要计算那一天是星期几,还可以用这样的式子:闰年时((year-1)*365+(year-1)/4-year/100+year/400+b[i]+1)%7==5平年时((year-1)*365+year/4-year/100+year/400+a[i]+1)%7==5其中a[i]和b[i]指的是该年1号到现在的天数(正如下面程序所示),这是因为我们知道公元1年1月1日是星期一。
给出年月日计算星期几
= 122,
这正是5月1日在2004年的累积天数。
假如,我们再变通一下,把1月和2月当成是上一年的“13月”和“14月”,不仅仍然符合这个公式,而且因为这样一来,闰日成了上一“年”(一共有14个月)的最后一天,成了d的一部分,于是平闰年的影响也去掉了,公式就简化成:
= 2002 + 500 - 20 + 5 + 36 + 1
= 2524;
2524 / 7 = 360……4.这和实际是一致的。
公式(5)已经是从年、月、日来算星期几的公式了,但它还不是最简练的,对于年份的处理还有改进的方法。我们先来用这个公式算出每个世纪第一年3月1日的星期,列表如下:
年份: 1(401,801,…,2001) 101(501,901,…,2101)
显然,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的余数。这个关系可以表示为:
【转】给出年月日,计算星期几--算法及算法来历最常见的公式:
W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D
Y是年份数,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天。
axure 蔡勒(zeller)公式
axure 蔡勒(zeller)公式蔡勒(Zeller)公式是一种用于计算给定日期的星期几的公式,它被广泛应用于历法计算和日期问题的解决中。
该公式由德国数学家蔡勒(Christian Zeller)在1884年提出,通过一系列简单的数学运算,可以快速准确地确定某一天是星期几。
蔡勒公式的原理是基于一种称为基姆拉尔森(Kim Larsen)的计算方法的改进。
该方法通过将日期转化为数值,然后通过一系列数学运算来确定星期几。
蔡勒公式的数学运算包括了年份、月份和日期的转化,以及一些特殊规则的应用。
我们需要将给定日期转化为数值。
对于公式来说,一月和二月被视为前一年的13月和14月,因此需要对年份和月份进行调整。
转化后的数值公式为:N = d + 2m + [3(m+1)/5] + y + [y/4] - [y/100] + [y/400] + 2其中,N为转化后的数值,d为给定日期,m为给定月份(3为3月,4为4月,依次类推),y为给定年份的后两位数。
方括号表示向下取整操作。
然后,我们可以通过对转化后的数值进行一系列运算,来确定给定日期是星期几。
蔡勒公式的运算如下:h = (N + J) mod 7其中,h为星期几,N为转化后的数值,J为一个与公式有关的常数(对于蔡勒公式来说,J的值为0)。
我们根据h的值来确定给定日期是星期几。
根据星期几的取值,我们可以用数字1到7来表示星期一到星期日。
蔡勒公式的应用非常广泛。
它可以用于计算历史上的任意日期是星期几,也可以用于计算未来的日期是星期几。
在日常生活中,蔡勒公式可以帮助我们快速确定某个特定日期是星期几,从而更好地安排日程和计划活动。
虽然蔡勒公式的原理相对简单,但在实际应用中仍需注意一些细节。
首先,该公式仅适用于1582年10月15日之后的日期,因为1582年10月4日至10月14日期间的日期在历法上有特殊规定。
其次,蔡勒公式在计算涉及公元前的日期时可能会出现错误,因为公元前的历法与公元后的历法有所不同。
蔡勒公式——精选推荐
int Change(int year,int month,int day)//根据日期判断出星期几 {
if(month == 1 || month == 2) { month += 12; year--;
} int c = year / 100; int y = year % 100; int m = month; int d = day; int W = c/4-2*c+y+y/4+26*(m+1)/10+d-1;//蔡勒公式 if(W < 0) return (W+(-W/7+1)*7)%7; return W%7; }
在公式中取值为已经过的世纪数也就是年份除以一百的结果而非正在进行的世纪也就是现在常用的年份除以一百加一
蔡勒公式
W=[C/4]-2C+y+[y/4]+[26(m+1)/10]+d-1 (其中[ ]为取整符号)
w:星期; w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六 c:世纪(注:在公式中取值为已经过的世纪数,也就是年份除以一百的结果,而非正在进行的世纪,也就是现在常用的年份除以一百加 一) y:年(后两位数) m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年 的13月1日来计算) d:日
ቤተ መጻሕፍቲ ባይዱ
元旦节数学题时间的推算
元旦节数学题时间的推算元旦是每年的1月1日,是中国传统节日之一。
在这一天,人们会放假庆祝,享受与家人朋友一起的时光。
然而,在我们庆祝元旦的同时,节数学题的推算也是不能被忽视的重要任务。
本文将通过运用数学知识,推算出元旦节数学题的时间,并探讨其中涉及的数学概念。
首先,我们需要确定元旦的日期,即1月1日。
而要精确推算出节数学题时间,我们需要知道元旦那天是星期几。
为了确定这一点,我们可以使用蔡勒公式。
蔡勒公式是一种根据公历日期计算星期的方法。
公式如下:h = (q + [(13 (m+1)) / 5] + K + [K/4] + [J/4] - 2J) mod 7其中,h代表星期几,q代表月份中的某一天,m代表月份,J代表年份的前两位数,K代表年份的后两位数,方括号表示向下取整,mod 表示取余运算。
元旦通常是在1月份,因此m=11,q=1。
J和K则需要根据具体的年份来确定。
以2022年为例,J=20,K=22。
将这些值代入蔡勒公式,即可计算出元旦的星期。
通过计算可得,2022年元旦是星期六。
以此类推,我们可以预先计算未来几年元旦的具体星期,并推算出节数学题的时间。
假设我们要推算2023年元旦的节数学题时间。
首先,我们需要确定2023年元旦的星期几。
根据前面的计算方法,将相应的值代入蔡勒公式,得出2023年元旦是星期日。
接下来,我们需要知道节数学题在元旦那天的具体时间安排。
一般而言,学校会在元旦期间举行活动,其中包括节数学题。
根据往年的经验,通常是在上午进行,并有一定的时间限制。
假设2023年元旦的节数学题时间为上午9点到11点。
那么,我们可以得出结论,2023年元旦的节数学题将在当天上午9点到11点进行。
除了推算未来年份的节数学题时间,我们还可以推算过去年份的节数学题时间。
比如,我们想知道2010年元旦的节数学题时间。
按照前面的计算方法,将相应的值代入蔡勒公式,可以得出2010年元旦是星期五。
进一步假设2010年元旦的节数学题时间为下午2点到4点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
program clgs; var a,b,c,d,x,y:longint; begin readln(a,b,d); if b<3 then begin b:=b+12; a:=a-1; end; y:=a mod 100; c:=a div 100; x:=y+trunc(y/4)+trunc(c/4)-2*c+trunc(13*(b+1)/5+d-1); while x<=7 do x:=x+7; writeln((x-1)mod 7+1); readln; readln; end.
蔡勒公式
蔡勒(Zeller)公式,是一个计算星期的公式,随便给一个日期,就能用这个公 式推算出是星期几。
公式
W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1 (或:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1) 若要计算的日期是在 1582 年 10 月 4 日或之前,公式则为 w=y+[y/4]+[c/4]-2c+[13(m+1)/5]+d+3
其他公式
对于计算星期数的公式还有如下的公式: 1.Week=(Day + 2*Month + 3*(Month+1)/5 + Year + Year/4 - Year/100 + Year/400) % 7 (其中的 Year 是四位数,如 2011。“%”号是等式除 7 取余数) 该式与蔡勒公式有点区别:“0”为星期 1,……,“6”为星期日! 该式可能与蔡勒公式的计算都是较为复杂,但有改进的地方:对于世纪 这个概念不被引用,直接就是计算年代数(4 位数)的,即不用再把 世纪 和 年代数(后两位)分开。 2.基姆拉尔森计算公式 W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 在公式中 d 表示日 期中的日数+1,m 表示月份数,y 表示年数。 注意:在公式中有个与其他公式不同的地方: 把一月和二月看成是上一年的十三月和十四月, 例:如果是 2011-1-10 则换算成:2010-13-10 来代入公式计算。 例:2011-10-17 计算时:d=18,m=10,y=2011。 Java 代码: string CaculateWeekDay(int y,int m, int d) { if(m==1) m=13; if(m==2) m=14; int week=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; string weekstr=""; switch(week) { case 1: weekstr="星期一"; break; case 2: weekstr="星期二"; break; case 3: weekstr="星期三"; break; case 4: weekstr="星期四"; break; case 5: weekstr="星期五"; break;
case 6: weekstr="星期六"; break; case 7: weekstr="星期日"; break; } return weekstr; } 3.(Year+Year/4+Year/400-Year/100-年基数+月基数+Day)/7=……余 Week(星期几)。【注:式中分数均取整。】 年基数:平年 1,闰年 2, 月基数: 1、平年:一月 0, 二月 3, 三月 3, 四月 6, 五月 1, 六月 4, 七月 0, 八 月 3, 九月 5, 十月 0, 十一月 3, 十二月 5. 2、闰年:一月 0, 二月 3, 三月 4, 四月 0, 五月 2, 六月 5, 七月 0, 八 月 3, 九月 6, 十月 1, 十一月 4, 十二月 6. 如:1949 年 10 月 1 日是星期几? (1949+1949/4+1949/400-1949/100-1+0+1)/7=(1949+487+4-19-1+0+1) /7=345……6 即该日为星期六。 所谓月基数,就是前几个月日数总和的 7 余数,如 1 月基数,前面月数 的日数总和的 7 余数为 0,则该月的基数就是 0,如 4 月(闰年)基数,前面 三个月的日数总和为:(31+29+31)/7=91/7……0 为了简化运算,先取各 月 7 余数,再相加,再取 7 余数:(3+1+3)/7……0,即 4 月基数为 0,为 了加快计算速度,通常是将平年和闰年的月基数编成基数表,直接查算。 月 基数,1、平年:一月 0, 二月 3, 三月 3, 四月 6, 五月 1, 六月 4, 七月 0, 八月 3, 九月 5, 十月 0, 十一月 3, 十二月 5. 2、闰年:一月 0, 二月 3, 三 月 4, 四月 0, 五月 2, 六月 5, 七月 0, 八月 3, 九月 6, 十月 1, 十一月 4, 十二月 6.
后来人们将这一新的历法称为“格里高利历”,也就是今天世界上所通 用的历法,简称格里历或公历。
计算代码
1582 年 10 月 4 日之后的计算代码如下:
c 代码: #include <stdio.h> int main() { int year,month,day; while(scanf("%d%d%d",&year,&month,&day)!=EOF){ int i,j,k; int c=year/100; int y=year-c*100; int week=int(c/4)-2*c+int(y+y/4)+int(13*(month+1)/5)+day-1; while(week<0) { week+=7; } week%=7; switch(week) { case 1: printf("Monday\n"); break; case 2: printf("Tuesday\n"); break; case 3: printf("Wednesday\n"); break; case 4: printf("Thursday\n"); break; case 5: printf("Friday\n"); break; case 6: printf("Saturday\n"); break; case 0: printf("Sunday\n"); break; } } return 0; } C++代码: #include <iostream> using namespace std; int main(){ int year,month,day; while(cin >> year >> month >> day){ if ( month < 3 ) { year -= 1; month += 12; } char b[7][10] = {"sunday","monday","tuesday","wednesday","thursday","friday","sat urday"}; int c = int(year / 100), y = year - 100 * c; int w = int(c / 4) - 2*c +y +int(y/4) +(26 * (month + 1)/10 ) + day - 1; w = ( w % 7 + 7 ) % 7; cout << b[w] << endl; Pascal 代码:
其中意义: w:星期; w 对 7 取得:0-星期日,1-星期一,2-星期二, 3-星期三,4-星期四,5-星期五,6-星期六
c:世纪(前两位数) y:年(后两位数) m:月(m 大于等于 3,小于等于 14,即在蔡勒公式中,某年的 1、2 月 要看作上一年的 13、14 月来计算,比如 2011 年 1 月 1 日要看作 2010 年的 13 月 1 日来计算) d:日 [ ]代表取整,即只要整数部分。 下面以中华人民共和国成立 100 周年纪念日那天(2049 年 10 月 1 日) 来计算是星期几,过程如下: w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 =49+[49/4]+[20/4]-2×20+[26×(10+1)/10]+1-1 =49+[12.25]+5-40+[28.6] =49+12+5-40+28 =54 (除以 7 余 5) 即 2049 年 10 月 1 日(100 周年国庆)是星期五。 再比如计算 2006 年 4 月 4 日,过程如下: w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 =6+[6/4]+[20/4]-2*20+[26*(4+1)/10]+4-1 =-12 (除以 7 余 2,注意对负数的取模运算!)