中国剩余定理(CRT)

中国剩余定理(CRT)


问题背景:

求解同余方程组:

{ 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} xa1( mod m1)xa2( mod m2)xa3( mod m3)xan( mod mn)

其中 m 1 , m 2 ⋅ ⋅ ⋅ m n m_1,m_2···m_n m1,m2mn两两互质


定理:

   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) Miti1( mod mi)的一个解。( M i , m i M_i,m_i Mimi互质,拓展欧几里得可以求解)
则同余方程组的解为: 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) aiMiti0(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) akMktkak(mod mk)

∴ M k t k ≡ 1 ( m o d   m k ) \therefore M_kt_k\equiv1(mod \ m_k) Mktk1(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) x11(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+tMx1+d1(mod m1)
x 1 ≡ 1 ( m o d   m 2 ) x_1\equiv 1(mod \ m_2) x11(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+tMx1+d1(mod m2)
⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ······
x 1 ≡ 1 ( m o d   m n ) x_1\equiv 1(mod \ m_n) x11(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+tMx1+d1(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 mid

∴ M ∣ d \therefore M|d Md

∴ 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+tMx1(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} xa1( mod m1)xa2( mod m2)xa3( mod m3)xan( 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} {xa1( mod m1)xa2( 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 k1m1k2m2=a2a1=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)bt

此时 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} {x0a1( mod m1)x0a2( 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)) xx0(mod lcm(m1,m2))

这样通过递推即可求解。


你可能感兴趣的:(ACM——数论)