BZOJ3000
斯特林公式模板题
斯特林公式: (n ! approx sqrt{2 pi n}left(frac{n}{e} ight)^{n})
在(n)较小时,斯特林公式精度不够,直接暴力求解
较大时使用公式,可知:
(log _{k} n !+1=frac{log (2 pi n)}{2log 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
",(int)ans);
}
else{
printf("%lld
",(long long)(log(2*acos(-1)*n)/(2.0*log(k))+(long long)n*(log(n)-log(exp(1)))/log(k)+1));
}
}
}