By Long Luo
昨天在B站看到一个数学视频,比较 2100! 和 2100! 的大小。直观感受就是这2个数都非常非常大,但哪个更大无法一眼看出来。
虽然指数爆炸,但阶乘实际上增长的速度比指数更快,如下图1所示:

可以看出阶乘图像 y=x! 实际上比指数 y=ex 要快很多,而 y=xx 是最快的。
但具体哪个更大呢?
这个问题有很多种方法,这里展示了4种方法。
对数放缩法 (Zoom)
由于对数 函数 y=logab 当 a>1 是单调递增函数,所以比较两个数大小时,可以通过比较两者对数值来实现大小比较。
两边同取对数 log2x ,
左边:
A=log2(2100!)=100!
右边:
B=log22100!=log22100+log2(2100−1)+⋯+1+0
共有 2100 项,值从 0 到 log22100=100 ,所以
B<100⋅2100<128⋅2100=27⋅2100=2107
综合上式,我们只需要比较 100! 和 2107 的大小即可。
100! 至少有 (100−64+1)=37 项是大于等于 64=26 ,也就是 (26)37=2222 。
显然可得 100!≫2222≫2107 。
故有虽然两个数都非常大,但 2100! 仍然远远大于 2100! 。
斯特林公式 (Stirling’s Approximation)
由于存在阶乘,我们可以使用斯特林公式(Stirling’s Approximation) 来估计。
n!∼2πn(en)n=2πn2n+1e−n
两边同取对数:
lnn!∼21ln(2π)+(n+21)ln(n)−n
根据上式,可见 n 足够大时,斯特林公式可以近似为:
ln(n!)∼n(ln(n)−1)
则有:
A=ln(2100!)=100!ln(2)B=ln(2100!)∼2100(ln(2100)−1)=2100(100ln(2)−1)
由于 210=1024≈103 ,则有 2100≈1030 , 那么 B≈1032ln(2) 。
很明显 100!≫1032 ,因此
2100!≫2100!
数列法
对于任意正整数 n ,比较 2n! 和 (2n)! 的大小。
我们可以构建一个序列:
Fn=(2n)!2n!
只需要判断 Fn 是否大于 1 即可。
当 n=1 时,
F1=(21)!21!=(2)!21=22=1
当 n=k+1 时,
Fk+1=2k+1!2(k+1)!=Fk⋅2k+1⋅(2k+1−1)⋯(2k+1)2(k+1)!−k!
分母中的阶乘项刚好是 2n 项,每项取值范围 [2n,2n+1] ,所以分母取值范围: [(2n)2n=2n2n,(2n+1)2n=2(n+1)2n] 。
所以:
- 当 (n+1)!−n!<n2n , An+1<An ;
- 当 (n+1)!−n!>(n+1)2n , An+1>An 。
因为 (n+1)!−n!=(n+1)n!−n!=n⋅n! ,当 n>2 时, n!>2n ,那么 n 大于某个值时, Fn+1>Fn 。
简单计算下前 7 项的值:
F2=0.25F3=0.0015⋯F4=8.018⋯×10−7F5=5.05⋯F6=4.34⋯×10127F7=4.02⋯×101301
可以看出, A100=A7⋅9⋅288⋅8!⋯101⋅2100100⋅100! 。
故 2100! 比 (2100)! 是超出想象的大。
简洁法
由图1显然 n!<nn ,也很容易证明。
n!=1×2×⋯n ,而 nn=n×n×⋯n 。
n>2 , nn≫n! 。
因此:
B=(2100)!<(2100)2100=2100⋅2100
进一步放缩,由 100<128=27 ,故有
B=(2100)!<22107
很明显 2107<100! !
这里用公因子方法来证明:
由于 100=2⋅50=4⋅25≥8⋅12≥16⋅6≥32⋅3>64 ,可得:
100!=250⋅225⋅212⋅26⋅23⋅2⋅332⋯520⋯11⋯97=297⋅11⋅13⋯97≫210⋅297=2107
所以 2100!≫(2100)! 。
参考文献