(扩展)中国剩余定理
中国剩余定理(CRT)
解决问题类型
例题:洛谷 P1495
【模板】中国剩余定理(CRT)(本题需要使用
快速乘,否则超出 unsigned long long
的存储范围)。
给定 n
个两两互质的正整数,构成序列 {mn}。再给定序列
{an},
有如下同余方程
结论
令
然后考虑求出 Mi × pi + mi × qi = 1 的一组可行解 (pi, qi)。
由于 mi 两两互质,所以 Mi ⊥ mi,那么 gcd (Mi, mi) = 1。
根据裴蜀定理,该方程必然存在解,故使用 Exgcd 求解即可。
令 ei = Mi × pi,则
证明
考虑 ei × ai
对 mj
取模的值,可以发现
(1) 式中,由于 ei = Mi × pi,而 Mi 是 mj 的倍数,所以结果为 0。
(2) 式中,pi 和 qi 满足 Mi × pi + mi × qi = 1,等式两边对 mi 取模,即得 ei mod mi = 1,再两边同乘 ai 就可以得证。
由此不难发现,将
算法流程
求出
。求出
。用 Exgcd 求出 Mi × pi + mi × qi = 1 的 pi。
注意,此时 pi 可能为负数,可以通过 pi ← pi + mi,qi ← qi − Mi,将 pi 变为非负数。
通过公式
得到答案。
时间复杂度
时间复杂度为 Θ(n + n + nlog n + n) ≈ O(nlog n),瓶颈在第三步求解不定方程。
Code
前置:
- Exgcd 中的
lint exgcd(lint, lint, lint &, lint &);。 - 快速乘中的
lint mul(lint, lint, lint);。
1 | using lint = long long; |
扩展中国剩余定理(ExCRT)
解决问题类型
例题:洛谷 P4777 【模板】扩展中国剩余定理(EXCRT)。
给定序列 {mn} 和序列
{an},
有如下同余方程
两个方程
设方程为
令 d = (m1, m2)。
那么这个方程的全部解即为
