中国剩余定理(CRT)

中国剩余定理(CRT)又称孙子定理,解决特殊的一次同余方程组的问题。

中国剩余定理

现有关于 x x x的一次同余方程组: I i = 1 n { x i ≡ a i        ( m o d    m i )            ( m x ⊥ m y ) \overset{n}{\underset{i=1}{\mathbb{I}}}\left\{\begin{matrix} x_i \equiv a_i\;\;\;(mod\;m_i) \end{matrix}\right.\;\;\;\;\;(m_x\perp m_y) i=1In{xiai(modmi)(mxmy)

其中模数两两互质。

中国剩余定理表明,此方程必然有解,并且给出了构造解的方法。

构造答案式

中国剩余定理的过程是:
M = ∏ m M=\prod m M=m
M i = M ÷ m i M_i= M \div {m_i} Mi=M÷mi,注意这一步是除法,不是乘法逆元。
t i ≡ M i − 1        ( m o d    m i ) t_i\equiv M_i^{-1} \;\;\;(mod\;m_i) tiMi1(modmi),也就是令 t i t_i ti M i M_i Mi m i m_i mi意义下的乘法逆元。

则最终一个合法的 x x x就是: ∑ i = 1 n M i ⋅ t i ⋅ a i \overset{n}{\underset{i=1}\sum}M_i\cdot t_i \cdot a_i i=1nMitiai

即: x ≡ ∑ i = 1 n a i ∏ j = 1 n m i [ i ≠ j ] ( ∏ j = 1 n m i [ i ≠ j ] ) − 1 ( m o d m i ) ( m o d M ) x\equiv\overset{n}{\underset{i=1}{\sum}}a_i\overset{n}{\underset{j=1}{\prod}}m_i^{[i\not=j]}\left(\overset{n}{\underset{j=1}{\prod}}m_i^{[i\not=j]}\right)^{-1\pmod {m_i}}\pmod M xi=1naij=1nmi[i=j](j=1nmi[i=j])1(modmi)(modM)

证明很简单:
x = ∑ i = 1 n M i ⋅ t i ⋅ a i x=\overset{n}{\underset{i=1}\sum}M_i\cdot t_i \cdot a_i x=i=1nMitiai带入一个方程 x k ≡ a k        ( m o d    m k ) x_k\equiv a_k\;\;\;(mod\;m_k) xkak(modmk)
∑ i = 1 n M i ⋅ t i ⋅ a i ≡ ? a k \overset{n}{\underset{i=1}\sum}M_i\cdot t_i \cdot a_i \overset{?}{\equiv} a_k i=1nMitiai?ak
M k ⋅ t k ⋅ a k + ∑ i = 1 n [ i ≠ k ] M i ⋅ t i ⋅ a i ≡ ? a k M_k\cdot t_k\cdot a_k+\overset{n}{\underset{i=1}\sum}[i\neq k]M_i\cdot t_i \cdot a_i \overset{?}{\equiv} a_k Mktkak+i=1n[i=k]Mitiai?ak

注意到等号左边的右式的每一项的 M i M_i Mi都是 m k m_k mk的倍数,因此取模之后和式为0。

M k ⋅ t k ⋅ a k ≡ ? a k M_k\cdot t_k\cdot a_k\overset{?}{\equiv} a_k Mktkak?ak

注意到 t k ≡ M k − 1 t_k\equiv M_k^{-1} tkMk1
M k ⋅ M k − 1 ⋅ a k ≡ ? a k M_k\cdot M_k^{-1}\cdot a_k\overset{?}{\equiv} a_k MkMk1ak?ak

显然左右相等:
a k ≡ a k a_k\equiv a_k akak

QED.

显然通解就是特解 x 0 + k ⋅ M x_0+k\cdot M x0+kM

也就是说,中国剩余定理事实上把 n n n个线性同余方程合并为一个同余方程:
x ≡ x 0        ( m o d    M ) x\equiv x_0\;\;\;(mod\;M) xx0(modM)

时间复杂度O(nlogn)

合并同余方程

这种中国剩余定理的思路是,把两个同余方程合并为一个同余方程,最终只剩下一个同余方程,就很容易解。

假设有 m 1 ⊥ m 2 m_1\perp m_2 m1m2 { x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) \left\{\begin{matrix} x\equiv a_1\pmod {m_1}\\ x\equiv a_2\pmod {m_2} \end{matrix}\right. {xa1(modm1)xa2(modm2)

我们构造 m 1 ⋅ x + m 2 ⋅ y = 1 m_1\cdot x+m_2\cdot y=1 m1x+m2y=1(这里的 x x x不是上面的 x x x),解得 x , y x,y x,y,无解说明方程组无解。(由于互质,不可能无解)
根据互为逆元的理论, m 1 − 1 ≡ x ( m o d m 2 ) , m 2 − 1 ≡ y ( m o d m 1 ) m_1^{-1}\equiv x\pmod{m_2},m_2^{-1}\equiv y\pmod {m_1} m11x(modm2),m21y(modm1)

根据构造答案式的过程,显然两个方程被合并为一个新的方程:
X ≡ a 1 m 2 y + a 2 m 1 x ( m o d m 1 m 2 ) X\equiv a_1m_2y+a_2m_1x\pmod{m_1m_2} Xa1m2y+a2m1x(modm1m2)

n − 1 n-1 n1次合并,就达到了和第一种方法一样的效果。解出了线性同余方程组。

时间复杂度O(nlogn)

模板题

后记

于是皆大欢喜。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值