中国剩余定理(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{xi≡ai(modmi)(mx⊥my)
其中模数两两互质。
中国剩余定理表明,此方程必然有解,并且给出了构造解的方法。
构造答案式
中国剩余定理的过程是:
令
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)
ti≡Mi−1(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=1∑nMi⋅ti⋅ai
即: 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 x≡i=1∑naij=1∏nmi[i=j](j=1∏nmi[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=1∑nMi⋅ti⋅ai带入一个方程
x
k
≡
a
k
(
m
o
d
m
k
)
x_k\equiv a_k\;\;\;(mod\;m_k)
xk≡ak(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=1∑nMi⋅ti⋅ai≡?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
Mk⋅tk⋅ak+i=1∑n[i=k]Mi⋅ti⋅ai≡?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 Mk⋅tk⋅ak≡?ak
注意到
t
k
≡
M
k
−
1
t_k\equiv M_k^{-1}
tk≡Mk−1:
M
k
⋅
M
k
−
1
⋅
a
k
≡
?
a
k
M_k\cdot M_k^{-1}\cdot a_k\overset{?}{\equiv} a_k
Mk⋅Mk−1⋅ak≡?ak
显然左右相等:
a
k
≡
a
k
a_k\equiv a_k
ak≡ak
QED.
显然通解就是特解 x 0 + k ⋅ M x_0+k\cdot M x0+k⋅M。
也就是说,中国剩余定理事实上把
n
n
n个线性同余方程合并为一个同余方程:
x
≡
x
0
(
m
o
d
M
)
x\equiv x_0\;\;\;(mod\;M)
x≡x0(modM)
时间复杂度O(nlogn)
合并同余方程
这种中国剩余定理的思路是,把两个同余方程合并为一个同余方程,最终只剩下一个同余方程,就很容易解。
假设有 m 1 ⊥ m 2 m_1\perp m_2 m1⊥m2: { 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. {x≡a1(modm1)x≡a2(modm2)
我们构造
m
1
⋅
x
+
m
2
⋅
y
=
1
m_1\cdot x+m_2\cdot y=1
m1⋅x+m2⋅y=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}
m1−1≡x(modm2),m2−1≡y(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}
X≡a1m2y+a2m1x(modm1m2)
做 n − 1 n-1 n−1次合并,就达到了和第一种方法一样的效果。解出了线性同余方程组。
时间复杂度O(nlogn)
后记
于是皆大欢喜。