勒让德公式推导
这个公式用于计算在质数 ( p ) 的阶乘 ( n! ) 的质因数分解中,( p ) 的指数是多少。
一、问题引入:n! 中有多少个质因子 p?
我们想知道,对于给定的质数 ( p ) 和正整数 ( n ),在 ( n! = 1 \times 2 \times 3 \times \dots \times n ) 的质因数分解中,( p ) 的指数是多少。我们把这个指数记作 ( v_p(n!) )。
例如,( 10! = 3628800 = 2^8 \times 3^4 \times 5^2 \times 7 )。那么 ( v_2(10!) = 8, v_3(10!) = 4, v_5(10!) = 2 )。
一个最直观的想法是:把 1 到 n 每个数里含有的 p 的因子数加起来。
- 有些数是 p 的倍数,它们至少贡献 1 个 p。
- 有些数是 p² 的倍数,它们在 p 的倍数基础上,又多贡献了 1 个 p。
- 有些数是 p³ 的倍数,它们又多贡献了 1 个 p。
- 以此类推...
那么,如何系统性地计数呢?
二、Legendre 公式的表述
定理 (Legendre公式):
设 ( p ) 为一个质数,( n ) 为一个正整数。则在 ( n! ) 的质因数分解中,( p ) 的指数 ( v_p(n!) ) 由以下公式给出:
[
v_p(n!) = \left\lfloor \frac{n}{p} \right\rfloor + \left\lfloor \frac{n}{p^2} \right\rfloor + \left\lfloor \frac{n}{p^3} \right\rfloor + \dots = \sum_{k=1}^{\infty} \left\lfloor \frac{n}{p^k} \right\rfloor
]
其中 ( \left\lfloor x \right\rfloor ) 表示对 ( x ) 向下取整(即不大于 ( x ) 的最大整数)。
注意: 这个和式是有限的,因为当 ( p^k > n ) 时,( \left\lfloor \frac{n}{p^k} \right\rfloor = 0 )。
三、公式的推导与原理
这个公式的推导思路非常清晰,核心思想是分类计数。
我们考虑 1 到 n 这 n 个数。
-
第一步:找出至少包含 1 个质因子 p 的数。
- 这些数就是 p 的倍数,即 ( p, 2p, 3p, \dots )。
- 在 1 到 n 中,这样的数有多少个?答案是 ( \left\lfloor \frac{n}{p} \right\rfloor ) 个。
- 我们先把这些数每个都“算作”贡献了 1 个 p。所以,我们先记下 ( \left\lfloor \frac{n}{p} \right\rfloor )。
-
第二步:找出至少包含 2 个质因子 p 的数。
- 这些数就是 p² 的倍数,即 ( p^2, 2p^2, 3p^2, \dots )。
- 在 1 到 n 中,这样的数有 ( \left\lfloor \frac{n}{p^2} \right\rfloor ) 个。
- 这些数在第一步已经被算过一次(因为它们也是 p 的倍数),但它们实际上包含了 两个 p 因子。所以,我们需要为它们补上第二个 p 因子。因此,我们加上 ( \left\lfloor \frac{n}{p^2} \right\rfloor )。
-
第三步:找出至少包含 3 个质因子 p 的数。
- 这些数是 p³ 的倍数,有 ( \left\lfloor \frac{n}{p^3} \right\rfloor ) 个。
- 它们在第一步和第二步已经被计算了两次,但它们包含 三个 p 因子,所以我们需要补上第三个 p 因子。因此,我们加上 ( \left\lfloor \frac{n}{p^3} \right\rfloor )。
-
以此类推...
- 我们继续这个过程,找出 p⁴, p⁵, ... 的倍数,并补上第 4 个、第 5 个... p 因子。
- 对于所有至少包含 k 个 p 因子的数,我们都通过加上 ( \left\lfloor \frac{n}{p^k} \right\rfloor ) 来补上第 k 个 p 因子。
为什么这样是正确的?
让我们追踪一个特定的数 ( m ),假设它恰好包含 ( e ) 个质因子 ( p )(即 ( p^e \mid m ) 但 ( p^{e+1} \nmid m ))。
- 当 ( k=1 ) 时(计算 p 的倍数),( m ) 被计入 1 次。
- 当 ( k=2 ) 时(计算 p² 的倍数),如果 ( e \ge 2 ),( m ) 会再次被计入 1 次。
- ...
- 当 ( k=e ) 时(计算 p^e 的倍数),( m ) 被计入 1 次。
- 当 ( k=e+1 ) 时,由于 ( p^{e+1} \nmid m ),它不再被计入。
所以,这个数 ( m ) 总共被计入了 ( e ) 次。这恰好就是它在 ( n! ) 中所贡献的 p 的指数。
因此,将所有 1 到 n 的数的贡献加起来,就得到了总的指数:
[
v_p(n!) = \sum_{k=1}^{\infty} \left\lfloor \frac{n}{p^k} \right\rfloor
]
四、实例演示
让我们用例子来验证这个公式。
例1:计算 ( v_2(10!) )
- ( \left\lfloor \frac{10}{2} \right\rfloor = 5 ) (2, 4, 6, 8, 10)
- ( \left\lfloor \frac{10}{4} \right\rfloor = 2 ) (4, 8)
- ( \left\lfloor \frac{10}{8} \right\rfloor = 1 ) (8)
- ( \left\lfloor \frac{10}{16} \right\rfloor = 0 )
所以,( v_2(10!) = 5 + 2 + 1 = 8 )。
例2:计算 ( v_5(100!) )
- ( \left\lfloor \frac{100}{5} \right\rfloor = 20 )
- ( \left\lfloor \frac{100}{25} \right\rfloor = 4 )
- ( \left\lfloor \frac{100}{125} \right\rfloor = 0 )
所以,( v_5(100!) = 20 + 4 = 24 )。这意味着 100! 的末尾有 24 个零。
五、另一种推导视角(计数的“洗牌”过程)
这个推导能帮助我们更深刻地理解公式的本质。
考虑 1 到 n 这 n 个数。
-
第一次,我们从中“筛出”所有 p 的因子。具体做法是:将每个数都写成 ( m = p \cdot q ) 的形式(如果 m 不是 p 的倍数,则 q 不是整数,但这不影响)。那么,我们总共能“筛出” ( \left\lfloor \frac{n}{p} \right\rfloor ) 个 p 因子。筛完后,剩下的商构成了一个新的序列:( 1, 2, 3, \dots, \left\lfloor \frac{n}{p} \right\rfloor )(注意,那些原本不是 p 的倍数的数,商是小数,我们暂时忽略,因为它们不贡献更多 p 因子)。
-
现在,我们面对的是这个新的序列 ( 1, 2, 3, \dots, \left\lfloor \frac{n}{p} \right\rfloor )。我们重复第一步的过程:从这个新序列中再次“筛出” p 的因子。这次我们能筛出 ( \left\lfloor \frac{\left\lfloor \frac{n}{p} \right\rfloor}{p} \right\rfloor = \left\lfloor \frac{n}{p^2} \right\rfloor ) 个 p 因子。
-
我们得到另一个新序列 ( 1, 2, 3, \dots, \left\lfloor \frac{n}{p^2} \right\rfloor ),继续筛,得到 ( \left\lfloor \frac{n}{p^3} \right\rfloor ) 个 p 因子。
-
重复这个过程,直到序列为空。
这个“反复筛”的过程,每一步筛出的 p 因子数正好就是 ( \left\lfloor \frac{n}{p} \right\rfloor, \left\lfloor \frac{n}{p^2} \right\rfloor, \dots )。所以,总的 p 因子数就是它们的和。
这个视角与第一种推导是等价的,但它更动态地展示了 p 因子被一步步“提取”出来的过程。
总结
Legendre 公式是一个优美而实用的组合计数公式。它的核心思想是:
通过计算 p 的各次幂的倍数个数,来逐层统计 n! 中所包含的质因子 p 的总数。
推导的关键在于认识到,一个包含 ( e ) 个 p 因子的数,会在计算 ( \left\lfloor \frac{n}{p} \right\rfloor, \left\lfloor \frac{n}{p^2} \right\rfloor, \dots, \left\lfloor \frac{n}{p^e} \right\rfloor ) 时被恰好计入 ( e ) 次。这个公式是数论和组合数学中一个非常基础且重要的工具。

浙公网安备 33010602011771号