斯特灵公式是一条用来取n阶乘近似值的数学公式。一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特灵公式十分好用,而且,即使在 n很小的时候,斯特灵公式的取值已经十分准确。
公式:
用斯特灵公式打表:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<iostream>
#define PI acos(-1.0)
#define E exp(1.0)
using namespace std;
bool cmp(int year,int fac){
double f=0.5*log2(2.0*PI*fac)+fac*log2(fac*1.0/E);
return (1<<((year-1960)/10))*4>f;
}
int main(){
int ans;
for(int year=1960;year<=2160;year+=10){
for(int i=1;;i++){
if(cmp(year,i)){
ans=i;
}else break;
}
printf("%d,",ans);
}
return 0;
}
ac代码:
#include<cstdio>
int a[]={3,5,8,12,20,34,57,98,170,300,536,966,1754,3210,5910,10944,20366,38064,71421,134480,254016};
int main(){
int n;
while(scanf("%d",&n),n){
printf("%d\n",a[(n-1960)/10]);
}
return 0;
}