1. 程式人生 > >斯特林公式 ——Stirling公式(取N階乘近似值)

斯特林公式 ——Stirling公式(取N階乘近似值)

斯特靈公式是一條用來取n階乘近似值數學公式。一般來說,當n很大的時候,n階乘的計算量十分大,所以斯特靈公式十分好用。從圖中可以看出,即使在n很小的時候,斯特靈公式的取值已經十分準確。

                                                    

公式為   n! \approx \sqrt{2\pi n}\, \left(\frac{n}{e}\right)^{n}.

從圖中看出,對於足夠大的整數n,這兩個數互為近似值。更加精確地:

     \lim_{n \rightarrow \infty} {\frac{e^n\, n!}{n^n \sqrt{n}}} = \sqrt{2 \pi}.       或者        \lim_{n \rightarrow \infty} {\frac{n!}{\sqrt{2\pi n}\, \left(\frac{n}{e}\right)^{n}}} = 1

這個公式,以及誤差的估計,可以推導如下。我們不直接估計n!,而是考慮它的自然對數

   \ln(n!) = \ln 1 + \ln 2 + \cdots + \ln n.

按一般方法計算N的階乘,其時間複雜度為O(N):N!= 1 * 2 * 3 * 4 * 5 * ............ * N;

如果要計算N後得到的數字為幾位數,則我們可以知道其位數等於lgN!+1;

則: 
\ln(n!) = \ln 1 + \ln 2 + \cdots + \ln n.

但是當N很大的時候,我們可以通過斯特林公式進行優化:(即Stirling公式)

n! \approx \sqrt{2\pi n}\, \left(\frac{n}{e}\right)^{n}.(e = 2.718)

斯特林公式可以用來估算某數的大小,結合lg可以估算某數的位數,或者可以估算某數的階乘是另一個數的倍數。
題目給出的N的範圍是: 1<= N <= 107  

用普通方法肯定算不出N的階乘後的出的數字位數,但運用斯特林公式則很好解決.

Stirling 公式


即:


    Stirling公式的意義在於:當n足夠大時,n!計算起來十分困難,雖然有很多關於n!的等式,但並不能很好地對階乘結果進行估計,尤其是n很大之後,誤差將會非常大。但利用Stirling公式可以將階乘轉化成冪函式,使得階乘的結果得以更好的估計。而且n越大,估計得越準確。


利用Stirling公式求解n!的位數:易知整數n的位數為[lgn]+1。利用Stirling公式計算n!結果的位數時,可以兩邊取對數,得:


故n!的位數為:


相關推薦

公式-Stirling公式N近似值-HDU1018-Big Number 牛客網NowCoder 2018年全國多校算法寒假訓練營練習比賽第三場A.不凡的夫夫

subject color content coder -m ria 一點 練習 java 最近一堆題目要補,一直鹹魚,補了一堆水題都沒必要寫題解。備忘一下這個公式。 Stirling公式的意義在於:當n足夠大時,n!計算起來十分困難,雖然有很多關於n!的等式,但並不能很

公式 ——Stirling公式N近似值

斯特靈公式是一條用來取n階乘近似值的數學公式。一般來說,當n很大的時候,n階乘的計算量十分大,所以斯特靈公式十分好用。從圖中可以看出,即使在n很小的時候,斯特靈公式的取值已經十分準確。    

【模板】第二類Stirling

pre ble 出發 ati val span 兩種 定義 技術 第二類Stirling數實際上是集合的一個拆分,表示將n個不同的元素拆分成m個集合的方案數,記為 或者 。 第二類Stirling數的推導和第一類Stirling數類似,可以從定義出發考慮第n+1個元

自編函式fact求問題

輸入一個正數x和一個正整數n,求下列算式的值。要求頂一個呼叫2個函式:fact(n)計算n的階乘;mypow(x,n)計算x的n次冪(即xn),兩個函式的返回值型別是double。      x - x2/2! + x3/3! + ... + (-1)n-1xn/n!×輸出保留4位小數。

與 pi 的關係 —— 公式Stirling formula

n!≈2πn−−−√(ne)n (1)斯特林公式是階乘的逼近公式,而不是完全相等; 1. 拋 2n 次硬幣,恰 n 次為正,n 次為反的概率 (2nn)(12)n(1−12)n=≈=(2n

(Stirling)公式 求大數的位數

href put || tdi code const 但是 body https 我們知道整數n的位數的計算方法為:log10(n)+1n!=10^m故n!的位數為 m = log10(n!)+1 lgN!=lg1+lg2+lg3+lg4+lg5+...........

Big Number HDU - 1018 公式

Big Number HDU - 1018 分類:斯特林公式 題意:給你n問n!中有多少位數。 知識一:n的位數為(int)log10(n) +1. 知識二:斯特林公式:n!=sqrt(2*pi*n)(n/e)^n。 此題可以暴力也可以利用公式求解。公式求解為log10(n

51nod1130——N的長度 V2公式

斯特林公式:n的階乘的近似值的數學公式                      斯特林公式(Stirling's approximation)是一條用來取n的階乘的近似值的

卡塔蘭(Catalan Number)數和公式(Stirling Approximation)分析

1.卡塔蘭數 設第n個卡塔蘭數為h(n)h(n)h(n),h(n)h(n)h(n)滿足h(n)=∑i=1nh(n−i)∗h(i−1)(h(0)=1,h(1)=1)h(n)=\sum^{n}_{i=1}{h(n-i)*h(i-1)}(h(0)=1,h(1)=1)h

hdu1018 Big Number公式

題意:求一個數階乘的位數。 思路:求一個數的位數,普通的for對這麼大的數先求出來是不現實的,所以就有了下面的公式: n的位數 = (int)log10(n)+1。 那n!的位數就是(int)l

N!的位數公式

斯特林公式 lnN!=NlnN-N+0.5*ln(2*N*pi) 要想求有多少位,將他換成以10為底便可! 利用換底公式得 lnN!/ln10=log10N! 把式子取整形加1就是位數!可以參考hd

poj 1423 打表/公式

分享圖片 namespace i++ png 調用 exp oid cout sin 對於n位數的計算,我們可以采用(int)log10(n) + 1的方法得到n的位數 第一種方法: 對於n!位數的計算,log10(n!) = log10(1) + log10(2) +

公式

... mage 斯特林公式 amp int stdout 進制 %d 問題 先想一個簡單的問題   讓你去求一個任意一個數 x 在 a 進制下的位數, 那麽答案就是 log(a)(x) + 1, (以 a 為底 x 的對數 + 1 ) 現在讓你去求 n! 在 a 進制下的

公式證明

info alt spl 9.png pla ima nbsp 證明 splay 斯特林公式證明

51nod1130---公式

題目連結:51nod1130 求位數公式是 log10(n)+1  然後此題讓求的是n的階乘的位數  那麼很多同學會想到  log0(N!)=log10(1*2*3...*N)+1 = log10(1)+log(2)+log(3)+....+log(N)+1

hdu1018 公式

Input Input consists of several lines of integer numbers. The first line contains an integer n, which is the number of cases to be tested, followed

bzoj3000 Big Number 公式

Description 給你兩個整數N和K,要求你輸出N!的K進位制的位數。 對於100%的資料,有2≤N≤2^31, 2≤K≤200,資料組數T≤200。 Solution 顯然答案就是log⁡k

公式n! 和 n!在m下的位數

斯特林公式: 公式如下: N!=2πn−−−√(ne)n 化簡如下: log10(n!)=log10(2πn−−−√(ne)n) 原式 = ln2πn√(ne)n 原式 = 0.5∗ln

【CF 140E】New Year Garland第二類(Stirling)數+DP+容斥

As Gerald, Alexander, Sergey and Gennady are already busy with the usual New Year chores, Edward hastily decorates the New Year Tree. And any decent New Ye

Stirling

【第一類斯特林數】 1.定理 第一類斯特林數 S1(n,m) 表示的是將 n 個不同元素構成 m 個圓排列的數目。 2.遞推式 設人被標上1,2,.....p,則將這 p 個人排成 m 個圓有兩種情況: ①第一種排法是在一個圓圈裡只有標號為 p 的人自己,排法有 S