$\text{Lucas}$ 及其拓展定理用于处理 $\dbinom{n}{m} \bmod p$ 的问题,其中 $\text{Lucas}$ 定理处理 $p$ 是质数的情况,而其拓展定理能够处理 $p$ 不是质数的情况。
$\text{Lucas}$
若 $p$ 是质数,则对于 $\forall \quad 1 \leq m \leq n, \quad m,n \in \Z $ ,有:
本质就是把 $n$ 和 $m$ 表示为 $p$ 进制数,对 $p$ 进制下每一位分别计算组合数再乘起来,证明超过了这里的讨论范围,这里就省略了。
$\text{ExtendedLucas}$
$\text{ExtendedLucas}$ 能够处理模数不互质的情况,其实和 $\text{Lucas}$ 并没有多大关系 ,主要思想是对模数 $p$ 进行质因数分解,我们设模数 $p$ 能够被分解为如下形式:
我们记 $C = \dbinom{n}{m}$ ,我们只需求出
接着我们只需用 CRT 合并以下答案就会得到最后的结果。
现在我们要考虑的是如何求解 $C \bmod p^\alpha$ 的值。考虑到 $\dbinom{n}{m} = \frac{n!}{m!(n-m)!}$ ,所以我们只需要求解 $n! \bmod p^\alpha$ 即可。
不妨假设我们要求 $19! \bmod 3^2$ 。我们有
后半部分是阶乘,递归计算就可以了。
对于前半部分模 $3^2$ 有一个长度为 $6$ 的循环节($1,2,4,5,7,8$),这样的话循环节整个进行统计,零头暴力即可。
$\text{Code}$
1 | // ---------- Lucas ------------------ |