问题背景:
求解同余方程组:
{ x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) x ≡ a 3 ( m o d m 3 ) ⋅ ⋅ ⋅ x ≡ a n ( m o d m n ) \begin{cases} x\equiv a_1(\ mod \ m_1)\\ x\equiv a_2(\ mod \ m_2)\\ x\equiv a_3(\ mod \ m_3)\\ ···\\ x\equiv a_n(\ mod \ m_n)\\ \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧x≡a1( mod m1)x≡a2( mod m2)x≡a3( mod m3)⋅⋅⋅x≡an( mod mn)
其中 m 1 , m 2 ⋅ ⋅ ⋅ m n m_1,m_2···m_n m1,m2⋅⋅⋅mn两两互质
定理:
M = ∏ i = 1 n m i , M i = M / m i \ \ M=\prod_{i=1}^nm_i \ \ \ \ \ , \ \ \ M_i=M/m_i M=∏i=1nmi , Mi=M/mi
t i t_i ti是线性同余方程 M i t i ≡ 1 ( m o d m i ) M_it_i\equiv 1(\ mod \ m_i) Miti≡1( mod mi)的一个解。( M i , m i M_i,m_i Mi,mi互质,拓展欧几里得可以求解)
则同余方程组的解为: x = ∑ i = 1 n a i M i t i x=\sum_{i=1}^na_iM_it_i x=∑i=1naiMiti。而且在模M意义下x有唯一解。
定理特解证明:
把x代入同余任一同余方程:
∵ M i = M / m i \because M_i=M/m_i ∵Mi=M/mi,
∴ a i M i t i ≡ 0 ( m o d m k ) ( i ̸ = k ) \therefore a_iM_it_i\equiv0(mod\ m_k)(i \not =k) ∴aiMiti≡0(mod mk)(i̸=k)
同余方程化为:
∴ a k M k t k ≡ a k ( m o d m k ) \therefore a_kM_kt_k\equiv a_k(mod \ m_k) ∴akMktk≡ak(mod mk)
∴ M k t k ≡ 1 ( m o d m k ) \therefore M_kt_k\equiv1(mod \ m_k) ∴Mktk≡1(mod mk)
显然成立。
模M内唯一解证明:
假设存在解 x 1 x_1 x1。
还存在另一个解 x 2 = x 1 + d + t M ( d % M > 0 ) , t x_2=x_1+d+tM(d\%M>0),t x2=x1+d+tM(d%M>0),t为整数。
代入所有同余方程:
x 1 ≡ 1 ( m o d m 1 ) x_1\equiv 1(mod \ m_1) x1≡1(mod m1)
x 2 = x 1 + d + t M ≡ x 1 + d ≡ 1 ( m o d m 1 ) x_2=x_1+d+tM \equiv x_1+d\equiv1(mod \ m_1) x2=x1+d+tM≡x1+d≡1(mod m1)
x 1 ≡ 1 ( m o d m 2 ) x_1\equiv 1(mod \ m_2) x1≡1(mod m2)
x 2 = x 1 + d + t M ≡ x 1 + d ≡ 1 ( m o d m 2 ) x_2=x_1+d+tM \equiv x_1+d\equiv1(mod \ m_2) x2=x1+d+tM≡x1+d≡1(mod m2)
⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ······ ⋅⋅⋅⋅⋅⋅
x 1 ≡ 1 ( m o d m n ) x_1\equiv 1(mod \ m_n) x1≡1(mod mn)
x 2 = x 1 + d + t M ≡ x 1 + d ≡ 1 ( m o d m n ) x_2=x_1+d+tM \equiv x_1+d\equiv1(mod \ m_n) x2=x1+d+tM≡x1+d≡1(mod mn)
对于同余方程 1 1 1,当 x 1 x 2 x_1\ x_2 x1 x2同时成立时, d = k 1 m 1 d=k_1m_1 d=k1m1。
对于同余方程 2 2 2,当 x 1 x 2 x_1\ x_2 x1 x2同时成立时, d = k 2 m 2 d=k_2m_2 d=k2m2。
⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ······ ⋅⋅⋅⋅⋅⋅
对于同余方程 2 2 2,当 x 1 x 2 x_1\ x_2 x1 x2同时成立时, d = k 3 m n d=k_3m_n d=k3mn。
∵ m i \because m_i ∵mi互质且 m i ∣ d m_i|d mi∣d
∴ M ∣ d \therefore M|d ∴M∣d
∴ x 2 = x 1 + d + t M ≡ x 1 ( m o d M ) \therefore x_2= x_1+d+tM\equiv x_1(mod \ M) ∴x2=x1+d+tM≡x1(mod M)
证毕。
拓展中国剩余定理(EXCRT):
当 m i m_i mi不满足两两互质的时候,解同余方程组的最小整数解:
{ x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) x ≡ a 3 ( m o d m 3 ) ⋅ ⋅ ⋅ x ≡ a n ( m o d m n ) \begin{cases} x\equiv a_1(\ mod \ m_1)\\ x\equiv a_2(\ mod \ m_2)\\ x\equiv a_3(\ mod \ m_3)\\ ···\\ x\equiv a_n(\ mod \ m_n)\\ \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧x≡a1( mod m1)x≡a2( mod m2)x≡a3( mod m3)⋅⋅⋅x≡an( mod mn)
取第一第二个同余方程:
{ x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) \begin{cases} x\equiv a_1(\ mod \ m_1)\\ x\equiv a_2(\ mod \ m_2)\\ \end{cases} {x≡a1( mod m1)x≡a2( mod m2)
导出:
{ x = a 1 + k 1 m 1 x = a 2 + k 2 m 2 \begin{cases} x=a_1+k_1m_1\\ x=a_2+k_2m_2\\ \end{cases} {x=a1+k1m1x=a2+k2m2
联立:
k 1 m 1 − k 2 m 2 = a 2 − a 1 = c k_1m_1-k_2m_2=a_2-a_1=c k1m1−k2m2=a2−a1=c
裴蜀定理得:当 d = g c d ( m 1 , m 2 ) ∣ c d=gcd(m_1,m_2)|c d=gcd(m1,m2)∣c时有解。
当 c < 0 c<0 c<0时,我们只能通过 c = ( c % m 2 + m 2 ) % m 2 c=(c\%m_2+m_2)\%m_2 c=(c%m2+m2)%m2来调整,因为在模 m 2 m_2 m2下同余类下调整影响的是 k 2 k_2 k2的取值,我们要求最小的 x x x,即最小的 k 1 k_1 k1,一定不能影响 k 1 k_1 k1。
调整 c = ( c % m 2 + m 2 ) % m 2 c=(c\%m_2+m_2)\%m_2 c=(c%m2+m2)%m2
建立方程: K 1 m 1 + K 2 m 2 = d K_1m_1+K_2m_2=d K1m1+K2m2=d
两边同时乘以 c / d c/d c/d
K 1 c d m 1 + K 2 c d m 2 = c \frac{K_1c}{d}m_1+\frac{K_2c}{d}m_2=c dK1cm1+dK2cm2=c
待定系数可得特解:
k 1 特 = K 1 c d k_{1特}=\frac{K_1c}{d} k1特=dK1c
求最小的 x x x即求最小的 k 1 k_1 k1
对于不定方程: a x + b y = c ax+by=c ax+by=c,由拓展欧几里得的通解公式:
x = x 0 + t b g c d ( a , b ) ( t 为 整 数 ) x=x_0+t\frac{b}{gcd(a,b)}(t为整数) x=x0+tgcd(a,b)b(t为整数)
此时 k 1 = k 1 特 + t m 2 d ( t 为 整 数 ) k_1=k_{1特}+t\frac{m_2}{d}(t为整数) k1=k1特+tdm2(t为整数)
所以在同余类中最小的 k 1 = ( k 1 特 % m 2 d + m 2 d ) % m 2 d k_1=(k_{1特}\%\frac{m_2}{d}+\frac{m_2}{d})\%\frac{m_2}{d} k1=(k1特%dm2+dm2)%dm2
把 k 1 k_1 k1代入 x = a 1 + k 1 m 1 x=a_1+k_1m_1 x=a1+k1m1得到一个最小特解 x 0 x_0 x0
此时 x 0 x_0 x0满足:
{ x 0 ≡ a 1 ( m o d m 1 ) x 0 ≡ a 2 ( m o d m 2 ) \begin{cases} x_0\equiv a_1(\ mod \ m_1)\\ x_0\equiv a_2(\ mod \ m_2)\\ \end{cases} {x0≡a1( mod m1)x0≡a2( mod m2)
此时第一第二个同余方程整合成了一个同余方程:
x ≡ x 0 ( m o d l c m ( m 1 , m 2 ) ) x\equiv x_0(mod \ lcm(m_1,m_2)) x≡x0(mod lcm(m1,m2))
这样通过递推即可求解。