给定整数 a , b , m a,b,m a,b,m,求一个整数 x x x 满足 a ∗ x ≡ b ( m o d m ) a*x \equiv b \pmod m a∗x≡b(modm),或者给出无解。
因为未知数的指数为 1 1 1,所以我们称之为一次同余方程,也称线性同余方程。
a ∗ x ≡ b ( m o d m ) a*x\equiv b\pmod m a∗x≡b(modm) 等价于 a ∗ x − b a*x-b a∗x−b 是 m m m 的倍数,不妨设为 − y -y −y 倍。于是,该方程可以改写为 a ∗ x + m ∗ y = b a*x+m*y=b a∗x+m∗y=b
根据 B e z o u t Bezout Bezout 定理,该方程有解当且仅当 gcd ( a , m ) ∣ b \gcd(a,m)\mid b gcd(a,m)∣b
在有解时,我们就可以使用扩展欧几里得算法求出方程的一组特解:
x
=
x
0
∗
b
/
gcd
(
a
,
m
)
x=x_0*b/\gcd(a,m)
x=x0∗b/gcd(a,m)
其中
x
0
x_0
x0 为方程
a
∗
x
0
+
b
∗
y
0
=
gcd
(
a
,
m
)
a*x_0+b*y_0=\gcd(a,m)
a∗x0+b∗y0=gcd(a,m) 的一个解
方程的通解则是所有模
m
/
gcd
(
a
,
m
)
m/\gcd(a,m)
m/gcd(a,m) 与
x
x
x 同余的整数,即
x
′
=
x
+
k
m
gcd
(
a
,
m
)
(
k
∈
Z
)
x'=x+k\dfrac{m}{\gcd(a,m)}\quad(k \in \mathbb{Z})
x′=x+kgcd(a,m)m(k∈Z)
设
m
1
,
m
2
,
.
.
.
,
m
n
m_1,m_2,~...~,m_n
m1,m2, ... ,mn 是两两互质的整数,
m
=
∏
i
=
1
n
m
i
m=\prod_{i=1}^n{m_i}
m=∏i=1nmi,
M
i
=
m
/
m
i
M_i=m/m_i
Mi=m/mi,
t
i
t_i
ti 是线性同余方程
M
i
t
i
≡
1
(
m
o
d
m
i
)
M_it_i\equiv 1 \pmod {m_i}
Miti≡1(modmi) 的一个解。对于任意的
n
n
n 个整数
a
1
,
a
2
,
.
.
.
,
a
n
a_1,a_2,~...~,a_n
a1,a2, ... ,an,方程组
{
x
≡
a
1
(
m
o
d
m
1
)
x
≡
a
2
(
m
o
d
m
2
)
…
x
≡
a
n
(
m
o
d
m
n
)
⎩
⎨
⎧x≡a1(modm1)x≡a2(modm2)…x≡an(modmn)
有整数解,解为
x
=
∑
i
=
1
n
a
i
M
i
t
i
x=\sum_{i=1}^n{a_iM_it_i}
x=∑i=1naiMiti
由这组特解可推出方程组的通解为 x + k m ( k ∈ Z ) x+km\; (k \in \mathbb{Z}) x+km(k∈Z)
方程组的最小非负整数解为 ( x m o d m + m ) m o d m (x \bmod m+m)\bmod m (xmodm+m)modm
因为 M i = m / m i M_i=m/m_i Mi=m/mi 是除了 m i m_i mi 之外所有模数的倍数,所以 ∀ k ≠ i , a i M i t i ≡ 0 ( m o d m k ) \forall k \ne i,\;a_iM_it_i \equiv 0 \pmod {m_k} ∀k=i,aiMiti≡0(modmk)
又因为 a i M i t i ≡ a i ( m o d m i ) a_iM_it_i \equiv a_i \pmod {m_i} aiMiti≡ai(modmi),所以代入 x = ∑ i = 1 n a i M i t i x=\sum_{i=1}^n{a_iM_it_i} x=∑i=1naiMiti,原方程组成立。