Lucas 定理
Lucas 定理,一般用于求某组合数对某质数取模的值,即 \(\binom{n}{m} \bmod p\)。
一般来说,这种东西有一堆求法。\(n, m\) 小的话可以直接递推,\(p > n\) 可以根据定义 \(\binom{n}{m} = \frac{n!}{m!(n-m)!}\) 预处理阶乘和阶乘的逆元求。但是如果 \(p \le n\),阁下又当如何应对?此时你不能保证 \(n\) 和 \(n - m\) 模 \(p\) 的逆元存在。于是我们使用—— Lucas 定理。
Lucas 定理
\(\binom{n}{m} \equiv \prod\limits_{i = 0}^x \binom{n_i}{m_i} \pmod p\),其中 \(n_i, m_i\) 分别为 \(n, m\) 在 \(p\) 进制下的各位数字,即 \(n = \sum\limits_{i = 0}^xn_ip^i\),\(m = \sum\limits_{i = 0}^xm_ip^i\)。
这样我们就可以递归地在 \(\log_p\) 的时间复杂度内求出答案了。代码也很好写:
int CC(int n, int m) { return (n < m ? 0 : fac[n] * ifac[m] % P * ifac[n - m] % P); }
int C(int n, int m) { return (n == 0 ? 1 : C(n / P, m / P) * CC(n % P, m % P) % P); }
需要预处理 \(p\) 以内的阶乘及其逆元。这个肯定是存在的。
接下来我们尝试证明 Lucas 定理。
证明
引理 1
若 \(p\) 为质数且 \(1 \le k < p\),则 \(\binom{p}{k} \equiv 0 \pmod p\)。
根据定义,\(\binom{p}{k} = \frac{p!}{k!(p - k)!} = \frac{p(p - 1)(p - 2) \cdots (p - k + 1)}{k!}\)。我们知道 \(\binom{p}{k}\) 肯定是个整数,所以 \(k! | p(p - 1)(p - 2) \cdots (p - k + 1)\)。又因为 \(p\) 是个质数,而 \(k < p\),所以 \(1 \cdots k\) 中一定没有 \(p\) 的因子,所以 \(k!\) 一定与 \(p\) 互质。所以 \(k! | (p - 1)(p - 2) \cdots (p - k + 1)\),即 \(\frac{(p - 1)(p - 2) \cdots (p - k + 1)}{k!}\) 肯定是个整数。发现没?这里少了个 \(p\)。那说明 \(p\) 肯定就是 \(\binom{p}{k}\) 的一个因数,即 \(\binom{p}{k} \equiv 0 \pmod p\)。
引理 2
若 \(p\) 为质数,则 \((1 + x)^p \equiv 1 + x^p \pmod p\)。
有了上一个引理的铺垫,这个证起来就很简单了。根据二项式定理,我们有 \((1 + x)^p = \sum\limits_{i = 0}^p\binom{p}{i}x^i\)。根据引理 \(1\),我们有 \(\binom{p}{i} \equiv 0 \pmod p (1 \le i < p)\),也就是当 \(1 \le i < p\) 时,\(\binom{p}{i}x^i \equiv 0 \pmod p\)。所以 \((1 + x)^p \equiv \binom{p}{0}x^0 + \binom{p}{p}x^p = 1 + x^p \pmod p\)。
引理 3
若 \(p\) 为质数,则 \((1 + x)^{p^i} \equiv 1 + x^{p^i} \pmod p\)。
我们考虑将 \(p^i\) 里面的 \(p\) 一个个地“搬”到括号里。即 \((1 + x)^{p^i} = ((1 + x)^p)^{p^{i - 1}} \equiv (1 + x^p)^{p^{i - 1}} \pmod p\)。然后将 \(x^p\) 视为新的 \(x\),再进行如上的操作,得到 \((1 + x^{p^2})^{p^{i - 2}}\),以此类推,直到括号外 \(p\) 变为 \(0\) 次为止。这样就可以得到 \((1 + x)^{p^i} \equiv 1 + x^{p^i} \pmod p\)。
接下来我们开始证明 Lucas 定理。
考虑一个式子 \(\sum\limits_{K = 0}^N\binom{N}{K}X^K\)。我们接下来对它进行变形。
对比最后一个式子和第一个式子,即 \(\sum\limits_{K = 0}^N\binom{N}{K}X^K \equiv \sum\limits_{K = 0}^N\prod\limits_{i = 0}^x\binom{n_i}{j_i}X^K \pmod P\)。由于两边模 \(P\) 是等价的,所以相同次数的 \(X\) 应当拥有(在模 \(P\) 意义下)相同的系数。所以 \(\binom{N}{K} \equiv \prod\limits_{i = 0}^x\binom{n_i}{j_i} \pmod P\)。证毕。

浙公网安备 33010602011771号