首页 > 编程知识 正文

1到n的阶乘和 数学公式,阶乘化简常用公式

时间:2023-05-04 11:21:58 阅读:136003 作者:4260

想必大家都知道n!很容易爆long long吧,n = 23时(unsigned long long)也束手无策。但很多时候我们又要用到n!

斯特林公式:

这个公式的证明使用了高数量的极限知识和Wallis公式,在此不作说明。 让我们来看看斯特林公式更准确的表达方式。n越大,n越大! 越准确,实际上n越小,斯特林的公式也越近似。

1 )牛客网(https://www.now coder.com/ACM/contest/75/a

题意:求n! 八进制位数。

思路:求十进制位数时怎么求? log10(n ) 1是答案。 同样,log8(n! 1是这个问题的解。

交流电源线:

# include iostream # include cstdio # include cmath # define exp (1) using namespace std; doublepi=ACOS(-1.0; int main () { int n,t; scanf('%d ',t ); wile(t-- ) Scanf ) ' %d ',n ); if(n==0) ) puts ) '1); 连续; }intans=(log10 )2*n*pi )/2n*log10(n/e ) )/log10(8); //对数性质斯特林公式printf(%d(n ),ans 1); } return 0; )2)牛客网: https://www.now coder.com/ACM/contest/185/f

题意清晰。

想法:用斯特林的公式表示n!两边取对数,再进行二分查找n的值。

交流电源线:

# include iostream # includecmathusingnamespacestd; typedef long ll; doublee=exp(1; doublepi=ACOS(-1.0; inlinedoublestirling(lln )/starling公式取对数(returnlog )2*n*pi )/2n*log ) n/e ); (}int main ) ) llx; while(cinx ) doubletep=x*log ) x; //x^x对数,等式左右都取对数并不影响结果ll l=x,r=2* x//2分钟左右的边界取决于x! x^x(2*x )! 来while(1) llmid=) lr )/2; if(stirling(mid-1 ) TEP stirling (mid ) TEP ) TEP ) mid-1更小,mid更大,mid一定最小) { coutmidendl; 黑; }if(stirling(mid ) tep ) l=mid 1; else r=mid-1; } } return 0; )总结: n! 很大。 使用斯特林公式取对数进行计算; 别忘了,这只是近似值。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。