整除和同余相关理论

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

下面的所有知识均属数论范畴。


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/pCn mod pm mod pmodp

代码就不贴了 (实际上是懒)


如果 ppp 不为质数呢?

那么我们先用唯一分解定理将 ppp 分解:
p=∑ki∈Primekiαi p = \sum_{k_i \in Prime} k_i^{\alpha_i} p=kiPrimekiα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!(nm)!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(nm)!kiβ1n!kiβ1β2β3modkiαi

不过我们还是先从研究 P! mod  kiαiP! \bmod~k_i^{\alpha_i}P!mod kiαi 开始。

OI−wikiOI-wikiOIwiki,我们用 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}\rfloorkiP 次幂,这个部分只需要记录指数,不需要求具体的值

第二个部分是 ⌊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×810×11×13×14×16×17 (mod kiαi)
形式化地,有:(t∈Z+t \in Z_+tZ+
∏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)=1kiαiii=1,gcd(i,ki)=

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值