日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

斯特林公式(Stirling's approximation)

發布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 斯特林公式(Stirling's approximation) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

斯特林公式(Stirling's approximation)是一條用來取n的階乘近似值的數學公式。一般來說,當n很大的時候,n階乘的計算量十分大,所以斯特林公式十分好用,而且,即使在n很小的時候,斯特林公式的取值已經十分準確。

?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

公式為? ?

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

?? ? ?? ? ? ?或者?? ? ? ?

?

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

? ?

?

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

?

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

則:?

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

(e = 2.718)

斯特林公式可以用來估算某數的大小,結合lg可以估算某數的位數,或者可以估算某數的階乘是另一個數的倍數。

?

例題:??http://acm.hdu.edu.cn/showproblem.php?pid=1018

題目給出的N的范圍是: 1<= N <=?107 ?

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

?

?

Stirling 公式

即:

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

?

?

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

故n!的位數為:

再添加一道例題:

#include <bits/stdc++.h> using namespace std; #define e exp(1) #define pi acos(-1) double log8(double x) {return log(x)/log(8);//loga(b)=logc(b)/logc(a) } double strling(double n) {return log8(2*pi*n)/2.0+n*(log8(n/e)); } int main() {int pp;scanf("%d",&pp);while (pp--) {int n;scanf("%d",&n);if (n==0) {puts("1");continue;}long long ans=(long long )strling(double(n));printf("%lld\n",ans+1);}return 0; }

?

?

?

?

?

?

?

?

總結

以上是生活随笔為你收集整理的斯特林公式(Stirling's approximation)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。