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));
}
}
}
浙公网安备 33010602011771号