不動紙筆,,電腦,,不查萬年歷,,僅憑心算,,說出任何一天是星期幾,,讀過這篇文章后,,你就可以做到,。 我最先是從一本心理學(xué)書上知道,,有人能說出幾十年里任何一天是星期幾,,但其智商很低,,被稱為“白癡天才”。當(dāng)時覺得很神奇,,就想找到一種方法,,通過簡單計算來得到結(jié)果,,經(jīng)過一番研究,終于獨(dú)立找到了算法,。若干年后,,我在網(wǎng)上看到了蔡勒公式,知道蔡勒也找到了類似的方法,。但蔡勒公式并沒那么簡單,,一般人很難用蔡勒公式來實現(xiàn)心算。前幾天,,又看到了維基百科的相關(guān)內(nèi)容,,其中的方法原理與我的一樣,但仍顯凌亂,,計算涉及的數(shù)字也稍大,,不便使用。而且重點(diǎn)只說方法,,沒有詳細(xì)解釋原理,,為什么那么算,時間久了,,難免容易遺忘,。這里,我用當(dāng)初研究時的思路,,把我掌握的算法介紹給大家,。 首先,如果某月的1日是星期1,,那么這個月的任何一天是星期幾很容易算出來,,把日數(shù)除以7求余數(shù)即可,例如9日就是星期2,。 如果1日不是星期1怎么辦,?可以看上月底是星期幾,把上月底星期數(shù)當(dāng)成本月的月基數(shù),,只要把月基數(shù)再加上本月算出的余數(shù)就行了,,因為這月的星期數(shù)就是從那天往后數(shù)的。例如上月底是星期3,,那么本月9日就是3+2=星期5,。 在現(xiàn)行歷法里,各月的天數(shù)是固定的,,知道了1月份的月基數(shù),,以后各月的月基數(shù)都可以推算出來。如果1月1日是星期1,,那么1月31日就是星期3,,這就是2月份的月基數(shù),;據(jù)此又可以算出2月28日(暫只考慮平年)還是星期3,這就是3月份的月基數(shù),;3月31日是星期6,,是4月份的月基數(shù),……一年12個月的月基數(shù)分別是0,,3,3,,6,,1,4,,6,,2,5,,0,,3,5,,這串?dāng)?shù)字叫做基本月基數(shù)(后文簡稱月基數(shù)),,非常重要,要心算星期必須記住,。每季度3個數(shù)字一組,,也很好記,即033,,614,,625,035,。 但實際上,,每年1月份的月基數(shù)不一定是0,可以是0——6的任何一個數(shù)字,,為此,,可以引入一個與月基數(shù)類似的年基數(shù)概念:上年底的星期數(shù),就是今年的年基數(shù),。把年基數(shù)與基本月基數(shù)相加,,就是各月實際的月基數(shù)。例如,,年基數(shù)為4,,那么8月份的月基數(shù)就是4+2=6,實際月基數(shù)是6,。 我們只要知道某年的年基數(shù),,這一年任何一天是星期幾也就可以很容易算出來,。例如,2013年的年基數(shù)是1,,2013年5月23日是星期幾,?年基數(shù)+月基數(shù)+23/7的余數(shù)=1+1+2=4,那天是星期4,。 如何才能知道某年的年基數(shù),?如果只是有限的三兩年,可以查下日歷,,然后記住就行了,,但要知道任何一年的年基數(shù),只能通過計算,。 (未完待續(xù)) 本打算沒人跟就不寫了 ------------------- 首先要明白,,一個平年365天,,用7除余1天,所以在星期計算意義上,,過一個平年等于過1天,,一個閏年相當(dāng)于2天。 如果一個世紀(jì)的00年的年基數(shù)是0,,在只考慮平年的情況下,,某年的年基數(shù)就是年份數(shù)除以7的余數(shù),由于實際歷法是4年一閏,,還要加上因閏年增加的天數(shù),。例如1917年,17%7=3,,而17年里有4個閏年,,所以1917年的年基數(shù)就是3+4=7=0。再例如1936年,,36/7余1,,而36年里有9個閏年,9%7=2,,1+2=3,,年基數(shù)是3 。 要心算星期數(shù),年基數(shù)計算是重點(diǎn),,應(yīng)盡可能簡化,。在同一個世紀(jì)里,每經(jīng)過28年,,不僅按平年算增加的28天可以被7整除,,而且其中7個閏年增加的7天也正好可以被7整除,所以在同一個世紀(jì)里,,年基數(shù)是28年一循環(huán),。當(dāng)年數(shù)大于28,56,,84時,,可以減去這些數(shù)字,以求簡化,,結(jié)果是一樣的。例如1959年,,與1903年的年基數(shù)是一樣的,,而03年顯然更簡單。再例如,,1981年,,差3年到84年,28-3=25,,所以81-56=25,,這比直接心算81-56更簡單。另外,,星期計算中+6=-1,,+5=-2。例如5+6=5-1=4,,4+5=4-2=2,。 再說說閏年的計算。我們在計算年基數(shù)時,,是見到閏年就直接多加一天,,但實際這一天是加在了2月29日,所以從2.月29日以后的計算結(jié)果沒有問題,,而之前的1,,2月份就多加了一天,必須減去,。例如,,1904年的年基數(shù)是5,3月份的月基數(shù)是3,,所以1904年3月1日就應(yīng)該是(5+3+1)%7=2,,是星期2,;前一天的2月29日就是星期1,但計算結(jié)果=年基數(shù)+月基數(shù)+日數(shù)=(5+3+29)%7=2,,必須再減去一天,,才是正確結(jié)果星期1。(%符號表示求余數(shù)) 1900年的年基數(shù)正好就是0,,從1900——1999年都可以用上面的方法來算,。例如1949年10月1日星期幾? 49年-28年=21年的年基數(shù)是0+5=5,,10月份的月基數(shù)0,,所以5+0+1=6,開國大典是星期6,。 37年7月7日星期幾,? 37年-28年=9年,年基數(shù)是2+2=4,,月基數(shù)是6,,日數(shù)7可以直接舍去不算,4+6=4-1=3,,七七事變那天是星期3,。 (未完待續(xù)) 更正:1937年7月7日星期幾?(原文漏了19) 37年-28年=9年,,年基數(shù)是2+2=4,,月基數(shù)是6,日數(shù)7可以直接舍去不算,,4+6=4-1=3,,七七事變那天是星期3。 我也是這個思路,,早在十多年前,,我就會心算任何年月日的星期幾了。只不過我不是以1900年為基準(zhǔn),,而是以1996年為基準(zhǔn),,計算近幾十年更方便。 年基數(shù)=年差(公元年數(shù)-1996),,在額外加上一個閏數(shù),。 閏數(shù)=年差/4,如果是正數(shù)(即1996年以后),,則小數(shù)一律進(jìn)1,。如果是負(fù)數(shù)(即1996年之前),則小數(shù)一律舍去。 并不是每一個00年的年基數(shù)都是0,,也可以是其他數(shù)字,,為此,我們可以像月基數(shù)和年基數(shù)一樣,,再用一個世紀(jì)基數(shù)來調(diào)整,,道理是完全一樣的。 現(xiàn)行的歷法是400年97閏,,整百的年份只有能被400整除的才是閏年,,其他的不是。1700年,,1800年,,1900年都是平年而不是閏年,2000年是閏年,。(400+97)%7=0,,整除無余數(shù),所以現(xiàn)行公歷每400年一循環(huán),,只要知道連續(xù)四個世紀(jì)的世紀(jì)基數(shù)就行了,。 先說第一個世紀(jì),沒有00年,,公元1年1月1日是星期1,年基數(shù)+月基數(shù)+日數(shù)=1+0+1=2,,只要再加上世紀(jì)基數(shù)就能求出星期數(shù)1,,顯然,世紀(jì)基數(shù)是6,;99年12月31日,,年基數(shù)+月基數(shù)+日余數(shù)=4+5+3=12,12%7=5,,再加上世紀(jì)基數(shù),,5+6=5-1=4,那天是星期4,,4就是公元100——199年的世紀(jì)基數(shù),;同理,4+5=4-2=2,,公元199年12月31日是星期2,,也就是公元200——299年的世紀(jì)基數(shù);…公元300——399年的世紀(jì)基數(shù)是,0,。以后就6,,4,2,0循環(huán)往復(fù),。在具體計算時,,可以把表示世紀(jì)的百位和千位數(shù)字當(dāng)成一個二位數(shù)用4除,當(dāng)余數(shù)是0,,1,,2,3時,,對應(yīng)的世紀(jì)基數(shù)就分別是6,,4,2,,0,。例如18**年,18%4=2,,對應(yīng)的世紀(jì)基數(shù)是2,;19**年對應(yīng)的世紀(jì)基數(shù)是0;20**年的世紀(jì)基數(shù)是6,,這3個世紀(jì)的基數(shù)經(jīng)常用,,記住就行了,不用臨時算,。 整百同時又是閏年的00年份,,如2000年,多出的一天不能被計算出來,,而是直接加在了世紀(jì)基數(shù)上,,所以后面年基數(shù)的計算,不受任何影響,。 1萬年等于25個400年,,2千年等于5個400年,所以無論給出的年份數(shù)字有多大,,萬位以上的都可以舍去,,夠2000就減2000,夠4000就減4000,,…只用不到2000的余數(shù)來算世紀(jì)基數(shù),,結(jié)果不受影響。例如 公元12345678年9月10日星期幾,? 年份數(shù)字雖大,,前面的1234都可以舍去不算,后面的5678-4000=1678,,16**對應(yīng)的世紀(jì)基數(shù)是6,,78-56=22,,年基數(shù)是1+5=6,月基數(shù)是5,,日余數(shù)3,,所以(6+6+5+3)%7=6,那一天星期6,。 至此,,我們可以輕松的計算出公元后任何一天(按現(xiàn)行公歷法則推延,不說儒略歷)是星期幾,,一般不用動筆,。心算能力稍差的可以用幾個手指頭輔助計算。在世紀(jì)基數(shù)+年基數(shù)+月基數(shù)+日余數(shù),,逐個相加過程中,,注意運(yùn)用+6=-1,+5=-2的技巧來簡化,,且當(dāng)中間結(jié)果超過7時,,立即減7,使中間結(jié)果保持在6以內(nèi),,這樣,,一只手的幾根手指就足夠用了。對于星期的計算來說,,掐指一算,,知過去將來并非難事。 (未完待續(xù)) 作為趣味問題,,按照現(xiàn)行公歷規(guī)則,,將歷法向前推至公元前的某一天,這種方法還能用嗎,?回答是:可以用。根據(jù)400年一循環(huán)的原則,,可以把公元前的某一天轉(zhuǎn)換成與之等效的公元后日期來算,。 由于沒有公元0年,公元前1年實際相當(dāng)于公元0年,,與公元400年正好相差400年,,如果公元前1年記作-1,只要數(shù)字上再加401就可以得到與之等效的公元400年,,公元前1——前400年都可以這樣來轉(zhuǎn)換到公元后,。具體計算上,可以把公元前年份用400來除,,也就是減去若干個400年,,得到不足400的年份,,用401減這個年份,就得到與之等效的公元后年份,,然后根據(jù)前面介紹的方法計算星期數(shù)就行了,。 例如,武王伐紂是在公元前1046年1月20日,,那一天是星期幾,? 1046-800=246,用401-246=155,,世紀(jì)基數(shù)4,,年基數(shù)6+6=6-1=5,月基數(shù)0,,日余數(shù)6,,(4+5+0+6)%7=1,所以武王伐紂那天是星期1,。 @卡特琳那 12樓 2013-06-29 00:36:12 簡單的算數(shù),,小學(xué)生都會算,問題是這玩意沒什么用啊 ----------------------------- 看以裝個白癡去參加最強(qiáng)大腦 |
|