扩展中国剩余定理(Excrt)笔记
1.莫比乌斯反演笔记2.欧拉定理 & 扩展欧拉定理 笔记3.高级数据结构笔记4.多项式(Poly)笔记
5.扩展中国剩余定理(Excrt)笔记
6.一次线性方程组 高斯消元笔记7.群论笔记8.字符串学习笔记9.一些典型的计数10.图论笔记11.高等代数笔记12.[笔记]博弈论 & SG 函数13.[笔记]决策单调性14.[笔记]线性基15.[笔记]组合数学的符号化方法16.[笔记]后缀自动机笔记17.[笔记]生成函数及其展开技巧18.[笔记]min25 筛19.[笔记]各种模板20.[笔记]插值21.[笔记]杜教筛 & Powerful Number 筛22.[笔记]动态规划优化(斜率优化,决策单调性优化)23.[笔记]行列式24.[笔记]Stern-Brocot 树25.[笔记]Important Tricks And Lemmas扩展中国剩余定理(excrt)
本来应该先学中国剩余定理的。但是有了扩展中国剩余定理,朴素的 CRT 就没用了。
扩展中国剩余定理用来求解如下形式的同余方程组:
扩展中国剩余定理的基本思想是合并,通过 次合并,将一个大的同余方程组合并成一个同余方程。
假设现在有两个同余方程:
现在要将他们合并。首先转化成不定方程:
成功转化成了系数为 的不定方程,使用 exgcd
求出他的一个根。因此转化成了一个同余方程:。合并完成。
// 合并 x = a(mod A), x = b(mod B) 两个方程
// 返回的是新的 a', b',满足 x = a'(mod b')
PII merge(int a, int A, int b, int B) {
int k1, k2; int d = exgcd(k1, k2, A, B);
k1 = k1 * (b - a) / d;
int p = A / d * B; return {(A * k1 + a) % p, p};
}
bonus:
- 如果 的系数不为 。
也就是 P4774 [NOI2018] 屠龙勇士。
求解形如:
Excrt 因为 的系数是一,因此可以直接联立两个不定方程。也尝试将这个东西转化成不定方程的形式。假设现在需要合并的两个同余方程是:
然后发现两个 的系数不同,不能直接合并了。而这两个柿子两边又不能同时除以 或者 ,因为不保证逆元存在。这就非常难搞。
一个神奇的思路是直接解出两个方程。以第一个方程为例,方程中只有两个未知数 和 ,可以解出一个特解 。那么所有 就可以表示成:
同理解第二个方程,可以得到
我们惊奇的发现这两个 的系数相同了。所以可以合并一下:
里面只有 两个未知数,解出他们两个就可以得到 。
- 扩展中国定理进行模数非质数的合并
即 古代猪文。
求 的值。
将 质因数分解得到:。
因此可以对 分别做一遍 ,得到下面的同余方程:
可以直接用 excrt 合并一下。
另外一个应用是扩展卢卡斯。其基本思路也是将模数拆成若干质因数的次方,计算后 excrt 合并。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示