常見算法題

常見算法題

  • 1000!的位數,即求取lg1000!的大小。

首先引入Stirling公式:n!\approx\sqrt{2\pi n}(\frac{n}{e})^n
證明:
a_n=\frac{n!e^n}{n^{n+\frac{1}{2}}},先證a_n存在極限:夾逼原理。
\frac{a_n}{a_{n+1}}=\frac{\frac{n!e^n}{n^{n+\frac{1}{2}}}}{\frac{(n+1)!e^{n+1}}{(n+1)^{n+1+\frac{1}{2}}}}=(1+\frac{1}{n})^{n+\frac{1}{2}}\frac{1}{e}>1
故有:a_n>a_{n+1},由a_n>0,故a_n存在極限。
求取極限,利用wallis公式:

應用:1000!的位數
1000!的位數,即求取lg1000!的大小。
lgn!\approx lg(\sqrt{2\pi n}(\frac{n}{e})^n)=\frac{1}{2}lg2\pi+\frac{1}{2}lgn+nlgn-nlg e,將1000帶入有。
lg1000!\approx \frac{1}{2}lg2\pi+\frac{3}{2}+3000-1000lge
lge=0.4342944819,lg(2\pi)=0.7981798684
故結果爲:lg1000!\approx 2567.604608,故結果爲2568位。

  • 計算某天星期幾

利用公式: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則, y=49,c=20,m=10,d=1,最後的結果爲: w=54,然後再對54取7的餘數。結果爲5,故爲週五。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章