BZOJ3000 斯特林公式

BZOJ3000

斯特林公式模板题

斯特林公式: \(n ! \approx \sqrt{2 \pi n}\left(\frac{n}{e}\right)^{n}\)

\(n\)较小时,斯特林公式精度不够,直接暴力求解

较大时使用公式,可知:

\(\log _{k} n !+1=\frac{\log (2 \pi n)}{2\log k}+n \frac{\log n-\log e}{\log k}+1\)

代码:

#include<bits/stdc++.h>
using namespace std;
long long n;
int k;
int main(){
    while(scanf("%lld %d",&n,&k)!=EOF){
        if(n<=500){
            double ans=1;
            for(int i=1;i<=n;i++){
                ans+=log(i)/log(k);
            }
            printf("%d\n",(int)ans);
        }
        else{
            printf("%lld\n",(long long)(log(2*acos(-1)*n)/(2.0*log(k))+(long long)n*(log(n)-log(exp(1)))/log(k)+1));
        }
    }
}
posted @ 2019-12-05 20:51  BilyHurington  阅读(142)  评论(0)    收藏  举报