如何估算阶乘的大小?

How Big Are Factorials?

如何估算阶乘的大小?

前几天我在想 52! 到底有多大,这促使我思考如何在不依赖计算器或电脑的情况下估算阶乘。其实,估算阶乘位数(即数字大小)背后有一些非常有趣的数学原理。文章首先给出了估算方法,随后深入探讨了 Gamma 函数和 Stirling 公式的推导过程。通过 Laplace 方法,我们可以从 Gamma 函数积分中推导出 Stirling 近似公式,进而利用对数计算阶乘的位数。以 52! 为例,估算结果与实际值 68 位惊人地接近。在处理这种天文数字时,误差几个位数通常无关紧要,但这套数学工具却能让我们快速把握数量级。

在像这样处理巨大数字的估算中,误差几个位数通常不是什么大问题。
  1. svobodamartin

    我最喜欢的一个例子是 52! 秒:

    启动一个计时器,从 52! 秒倒数到 0。

    然后,每过十亿年走一步,绕着地球赤道走一圈。

    接着,当你走完赤道一圈(每十亿年一步)后,从太平洋里取出一滴水。

    然后,重复绕赤道行走的过程,每走完一圈,就再取出一滴水。

    等海洋被完全抽干后,把海洋重新注满,并在你脚下垫一张纸。

    现在,再次重复行走、抽水、垫纸的过程。

    等到你垫的纸堆高到太阳时,再重复整个过程 1000 次。

    做完这一切,计时器才刚刚走完大约三分之一。

    https://sites.imsa.edu/hadron/2025/02/26/how-big-is-52/

  2. ninju

    作者在文章开头随口提到的 52!,让我想起了多年前看到的一个旧网页:

    https://czep.net/weblog/52cards.html

    有人知道怎么判断这个页面的年龄吗(它肯定至少有 20 年历史了)

  3. andrewla

    这让我想起了 Bender & Orszag 书中的分析;他们通过差分方程(这在形式数学中已是一门失传的艺术,很有 19 世纪的味道)来处理这个问题,而不是用积分。

    他们没有引入伽马函数,而是从观察 log(F_n) - log(F_n-1) = log(n) 出发,将这种差分视为类似于积分,从而得出 F_n 的主项渐近行为约为 nlogn + n。这一点仅通过代入和代数运算就能看清,无需微积分(尽管“预先知道答案”会有帮助)。

    从那里出发,你可以将误差项处理为 F_n = n^n * e^n * E_n,并将其代入相同的递推关系(F_n = n * F_n-1),推导出该误差项的渐近形式,最终得到与 OP 中积分方法相同的结果。

  4. movpasd

    斯特林近似在统计力学中也用得很多,因为你经常需要计算状态空间大小的对数,这意味着大量的组合数学,也就是大量的阶乘。此外,它是连续的,所以可以进行微积分运算。

  5. Sharlin

    估算 n! 位数的一个粗略方法是 n lg n,它通过不等式

    1 * 2 * … * n ≤ n * … * n

    从上方近似 n!。

    (这种近似对很多学过算法课程的人来说应该很熟悉。)

    若要更紧的界,可使用 n lg n - n/2,或者如果你愿意,用 ln 10 的更好近似值来替换 1/2。这源于斯特林近似,它指出:

    ln n! = n ln n - n + O(ln n)。

同日更多故事

2026-09-16