码迷,mamicode.com
首页 > 其他好文 > 详细

斯特林公式

时间:2018-02-20 14:43:07      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:图片   post   +=   pre   http   width   while   分享   就是   

先想一个简单的问题

  让你去求一个任意一个数 x 在 a 进制下的位数, 那么答案就是 log(a)(x) + 1, (以 a 为底 x 的对数 + 1 )

现在让你去求 n! 在 a 进制下的位数 答案就是 log(a)( n! ) = log(a)(1*2*3*...*n) = log(a)(1) + log(a)(2) + log(a)(3) + ... + log(a)(n) . 最后在取整 + 1

这种做法的复杂度是 n *log n ,当 n 很大时显然是不可取的,斯特林公示是对此的一个优化

int main() {
    //freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);
    int x;
    
    while(~scanf("%d", &x)){
        double ans = 0;
        int s = 1;
        for(int i = 1; i <= x; i++){
            ans += log10(i);
            s *= i;
        }        
        printf("%d  ", s);
        printf("%d\n", (int)(ans)+1);
    }
    return 0;
}

 

斯特林公式

技术分享图片

在这边 pi = acos(-1.0)  e = exp(1.0) ;

斯特林公式

标签:图片   post   +=   pre   http   width   while   分享   就是   

原文地址:https://www.cnblogs.com/ccut-ry/p/8455182.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!