斯特林公式

取n阶乘近似值的数学公式

斯特林公式

斯特林公式(Stirling's approximation)是一条用来取n的阶乘的近似值的数学公式。一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特林公式十分好用,而且,即使在n很小的时候,斯特林公式的取值已经十分准确。斯特林公式在理论和应用上都具有重要的价值,对于概率论的发展也有着重大的意义。在数学分析中,大多都是利用Г函数、级数和含参变量的积分等知识进行证明或推导,很为繁琐冗长。近年来,一些国内外学者利用概率论中的指数分布、泊松分布、分布证之。

斯特林公式(Stirling's approximation)是一条用来取n的阶乘的近似值的数学公式。一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特林公式十分好用,而且,即使在n很小的时候,斯特林公式的取值已经十分准确。

公式定义

斯特林公式在理论和应用上都具有重要的价值,对于概率论的发展也有着重大的意义。在数学分析中,大多都是利用Г函数、级数和含参变量的积分等知识进行证明或推导,很为繁琐冗长。近年来,一些国内外学者利用概率论中的指数分布、泊松分布、分布证之。

公式形式

或更精确的

证明方式

所以 即,即单调递减,又由积分放缩法

即,即

由单调有界定理 的极限存在,

利用Wallis公式,

所以

主要程序

斯特林数判断阶乘位数

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<math.h>

const double e = 2.71828182845;

const double pi = 3.1415926;

int main(void) {

int t, i, f, v;

double a, s;

const double log10_e = log10(e);

const double log10_2_pi = log10(2.0*pi)/2.0;

while (scanf("%d", &t) != EOF && t) {

for (i = 0; i < t; ++i) {

scanf("%d\n", &v);

if (1 == v) {printf("1\n"); continue;}

a = v;

s = log10_2_pi + (a+0.5)*log10(a) - a * log10_e;

f = ceil(s);

printf("%d\n", f); } }

return 0; }

广告位:底部(ad-bottom)—— 请到中台「公共区块」编辑此内容