1. 程式人生 > >51nod 1130 N的階乘的長度(斯特林近似)

51nod 1130 N的階乘的長度(斯特林近似)

ron 3.1 https sum nbsp n! pri 數學 一般來說

輸入N求N的階乘的10進制表示的長度。例如6! = 720,長度為3。 Input
第1行:一個數T,表示後面用作輸入測試的數的數量。(1 <= T <= 1000)
第2 - T + 1行:每行1個數N。(1 <= N <= 10^9)
Output
共T行,輸出對應的階乘的長度。
Input示例
3
4
5
6
Output示例
2
3
3

斯特林公式是一條用來取n階乘近似值的數學公式。一般來說,當n很大的時候,n階乘的計算量十分大

所以斯特靈公式十分好用,而且,即使在n很小的時候,斯特靈公式的取值已經十分準確

公式為: 技術分享

這就是說,對於足夠大的整數n

,這兩個數互為近似值。更加精確地: 技術分享

技術分享 然後取一下log()+ 1就出來了

簡單說

n!=n*(n-1)*(n-2)*......*3*2*1

∴lg(n!)=lg(n)+lg(n-1)+lg(n-2)+......+lg(3)+lg(2)+lg(1);

Stirling數求N!的位數:log10(n!)=0.5 * log10(2 * PI * n) + n * log10(n / e);

 1 #include <stdio.h>
 2
#include <math.h> 3 #define e 2.718281828459 4 #define pi 3.1415926 5 int main(){ 6 int n, t; 7 long long sum; 8 scanf("%d",&t); 9 while(t--){ 10 scanf("%d",&n); 11 sum=1+0.5*log10(2*pi*n)+n*log10(n/e); 12 printf("%I64d\n",sum); 13 } 14 return
0; 15 }

  



51nod 1130 N的階乘的長度(斯特林近似)