斯特林公式與階乘

2021-08-27 16:27:13 字數 919 閱讀 9547

想必大家都知道n!很容易爆long long吧,n = 23時(unsigned long long)也束手無策。但很多時候我們又要用到n!

1) 牛客網:

題意:求n!在8進製下的位數。

思路:我們求乙個10進製數的位數時怎麼求,log10(n)+1就是答案。同理,log8(n!)+1就是此題的解。

ac**:

#include#include#include#define e exp(1)

using namespace std;

double pi=acos(-1.0);

int main()

int ans= (log10(2*n*pi)/2+n*log10(n/e))/log10(8) ;//對數的性質+斯特靈公式

printf("%d\n",ans+1);

}return 0;

}

2)牛客網:

題意很清楚。

思路:用斯特靈公式表示n!,對兩邊去對數,再二分找n值。

ac**:

#include#includeusing namespace std;

typedef long long ll;

double e = exp(1);

double pi=acos(-1.0);

inline double stirling(ll n) //斯特靈公式取對數

int main()

if(stirling(mid)

else r=mid-1;}}

return 0;

}

斯特林公式

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

斯特林公式

斯特林公式的常見表示形式 顯而易見,這個公式主要是用來求近似的階乘的值的,在競賽中往往只採用第乙個形式,其精確度已經足夠用來求階乘位數了.lg n lg 2 n 2 n lg n lg e 這個公式就是圖中第乙個式子左右同時求對數得到的.不難發現,10x,10 x 1 之間囊括了所有長度為x 1的數...

斯特林公式

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