天天看點

算法之斯特林公式

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

公式和公式的證明請移步百科:斯特林公式

對于一個B進制的數,隻需要對其取以B的對數就可以得到他在B進制情況下的位數(取了對數之後可能為小數,是以還需要取整後再+1)
 N!的位數就是
 [lg(N!)]+1=[lg(1)+lg(2)+…+lg(N)]+1
           =(int)ceil[(n*ln(n)-n+0.5*ln(2*n*π))/ln(B)]
           /*ceil是向上取整,[]符号為取整*/
           
例如:
9的階乘等于:362880
它的二進制表示為:1011000100110000000
這個數字共有19位。

請你計算,9999 的階乘的二進制表示一共有多少位?
           
public static void main(String[] args) {
        int sum = ;
        int final_= (int) Math.ceil((sum*Math.log(sum)-sum+*Math.log(*sum*Math.PI))/Math.log());
     System.out.println(final_);
           

轉載自:http://www.cnblogs.com/hsqdboke/archive/2012/04/19/2458649.html

繼續閱讀