斯特林公式

2021-09-25 17:30:18 字數 1545 閱讀 9404

斯特林公式的常見表示形式

顯而易見,這個公式主要是用來求近似的階乘的值的,在競賽中往往只採用第乙個形式,其精確度已經足夠用來求階乘位數了.

lg(n!)=lg(2πn)/2+n∗(lg(n)−lg(e))這個公式就是圖中第乙個式子左右同時求對數得到的.

不難發現,[10x,10(x+1) )之間囊括了所有長度為x+1的數,而lg(m*10^x)=x+lg(m),而lg(m)一定是小於1的,所以我們只需要看lg(n!)的整數部分(然後再加1)就可以了.

綜上所述

n! == int(floor(log10(2 * pi * n) / 2 + n * (log10(1.0 * n) - loge)))+1

但是要注意!! n==1 或者0 時必須特判才行,1!=1,如果按照此公式,會得到0這個匪夷所思的答案.

poj 1423

#include

#include

#include

#include

using namespace std;

#define ll long long

#define maxn 1100

const

double e =

2.71828182845

;#define loge log10(e)

#define pi 3.1415926535

intmain()

else

}return0;

}

牛客75a

我嘗試直接魔改上面的公式,在後面整體換底,結果失敗了(通過了60%的資料),應該是只能在計算對數的時候就算8的底(注:下文的log8並沒有內建的函式,是自己寫的)

#include

#include

#include

#include

using namespace std;

#define ll long long

#define maxn 1100

double

log8

(double x)

const

double e =

exp(1)

;const

double loge =

log8

(e);

// 這個單獨定義出來挺雞肋的,還怕忘了改

const

double pi =

acos(-

1.0)

;int

main()

else

}return0;

}

斯特林公式

斯特林公式是一條用來取n階乘近似值的數學公式。一般來說,當n很大的時候,n階乘的計算量十分大,所以斯特靈公式十分好用。斯特林公式可以用來估算某數的大小,結合lg可以估算某數的位數,或者可以估算某數的階乘是另乙個數的倍數。stirling公式的意義在於 當n足夠大時,n 計算起來十分困難,雖然有很多關...

斯特林公式

夫夫有一天對乙個數有多少位數感興趣,但是他又不想跟凡夫俗子一樣,所以他想知道給乙個整數n,求n!的在8進製下的位數是多少位。第一行是乙個整數t 0示例1 3425 2 13 include using namespace std const long double pi 3.141592653589...

斯特林公式應用

51nod1058 這題讓求n的階乘長度,n範圍到1e6,很明顯會爆long long,那麼就需要乙個公式直接算出結果 斯特林公式,這個公式的作用就是求n階乘的近似值。我們知道求乙個十進位制數x的位數,log10 x 1,用斯特林公式帶入x,兩邊取對數 可以看出斯特林公式的作用,上式左邊n!會爆,而...