下面的所有知识均属数论范畴。
LucasLucasLucas 定理
当 ppp 为质数时有:
Cnm mod p=Cn/pm/p∗Cn mod pm mod p mod p C_n^m \bmod p= C_{n / p}^{m / p} * C_{n~\bmod~p}^{m~\bmod~p} \bmod p Cnmmodp=Cn/pm/p∗Cn mod pm mod pmodp
代码就不贴了 (实际上是懒)。
如果 ppp 不为质数呢?
那么我们先用唯一分解定理将 ppp 分解:
p=∑ki∈Primekiαi p = \sum_{k_i \in Prime} k_i^{\alpha_i} p=ki∈Prime∑kiαi
然后把原式拆分为若干个同余方程,最后用中国剩余定理合并即可。
现在我们讨论如何求 Cnm mod kiαiC_n^m \bmod k_i^{\alpha_i}Cnmmodkiαi,而 Cnm=n!m!(n−m)!C_n^m = \frac{n!}{m!(n - m)!}Cnm=m!(n−m)!n!,所以问题本质上是求阶乘的取模。
设我们要求的是 P! mod kiαiP! \bmod~k_i^{\alpha_i}P!mod kiαi,那么我们可以把 P!P!P! 包含的所有 kik_iki 质因子取出,由于剩下的数与模数互质,所以我们就可以直接求逆元了。
所以最终要求的问题是求:
n!kiβ1m!kiβ2⋅(n−m)!kiβ3⋅kiβ1−β2−β3 mod kiαi \frac{\frac{n!}{k_i^{\beta_1}}}{\frac{m!}{k_i^{\beta_2}} \cdot \frac{(n - m)!}{k_i^{\beta_3}}} \cdot k_i^{\beta_1 - \beta_2 - \beta_3}\bmod k_i^{\alpha_i} kiβ2m!⋅kiβ3(n−m)!kiβ1n!⋅kiβ1−β2−β3modkiαi
不过我们还是先从研究 P! mod kiαiP! \bmod~k_i^{\alpha_i}P!mod kiαi 开始。
同 OI−wikiOI-wikiOI−wiki,我们用 22! mod 3222! \bmod 3^222!mod32 举例。
我们知道:
22!=1×2×3×4×5×6×7×8×9×10×11×12×13×14×15×16×17×18×19×20×21×22. 22! = 1\times2\times3\times4\times5\times6\times7\times8\times9\times10\times11\times12\times13\times14\times15\times16\times17\times18\times19\times20\times21\times22. 22!=1×2×3×4×5×6×7×8×9×10×11×12×13×14×15×16×17×18×19×20×21×22.
我们把 333 的倍数提出来,化简一下有:
22!=37×(1×2×3×4×5×6×7)×(1×2×4×5×7×8×10×11×13×14×16×17×19×20×22) 22! = 3^7\times(1\times2\times3\times4\times5\times6\times7) \times(1\times2\times4\times5\times7\times8\times10\times11\times13\times14\times16\times17\times19\times20\times22) 22!=37×(1×2×3×4×5×6×7)×(1×2×4×5×7×8×10×11×13×14×16×17×19×20×22)
第一个部分是 kik_iki 的 ⌊Pki⌋\lfloor\frac{P}{k_i}\rfloor⌊kiP⌋ 次幂,这个部分只需要记录指数,不需要求具体的值;
第二个部分是 ⌊Pki⌋!\lfloor\frac{P}{k_i}\rfloor!⌊kiP⌋!,可以递归求解;
第三个部分是 1×2×4×5×7×8×10×11×13×14×16×171\times2\times4\times5\times7\times8\times10\times11\times13\times14\times16\times171×2×4×5×7×8×10×11×13×14×16×17,仔细观察可以发现:
1×2×4×5×7×8≡10×11×13×14×16×17 ( mod kiαi) 1\times2\times4\times5\times7\times8 \equiv10\times11\times13\times14\times16\times17~(\bmod~k_i^{\alpha_i}) 1×2×4×5×7×8≡10×11×13×14×16×17 (mod kiαi)
形式化地,有:(t∈Z+t \in Z_+t∈Z+)
∏i=1,gcd(i,ki)=1kiαii≡∏i=1,gcd(i,ki)=1kiαi(i+tkiαi) ( mod kiαi) \prod_{i = 1,\gcd(i, k_i) = 1}^{k_i^{\alpha_i}} i \equiv \prod_{i = 1,\gcd(i, k_i) = 1}^{k_i^{\alpha_i}} (i + tk_i^{\alpha_i}) ~(\bmod k_i^{\alpha_i}) i=1,gcd(i,ki)=1∏kiαii≡i=1,gcd(i,ki)=

这篇博客深入探讨数论中的 Lucas 定理及其在处理模运算中的应用,包括利用唯一分解定理解决非质数模的同余问题。此外,还介绍了 BSGS 算法、中国剩余定理、原根和二次剩余的理论与求解方法,是理解数论基础与进阶的宝贵资料。
最低0.47元/天 解锁文章
1142

被折叠的 条评论
为什么被折叠?



