[数论]扩展中国剩余定理(EX-CRT)

前言

CRT和EX-CRT目的都是为了解决同余的问题,但他们在方法上有着本质的区别,这篇文章主要用数学归纳法来证明EX-CRT。

问题

给你 n n n a , m a,m a,m,需要你求出最小的x满足下面的同余式

{ x ≡ a 1 ( m o d   m 1 ) x ≡ a 2 ( m o d   m 2 ) . . . . . . 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_n(mod\ m_n)\end{cases} xa1(mod m1)xa2(mod m2)......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 = k 1 ∗ m 1 + a 1 x=k_1*m_1+a_1 x=k1m1+a1(以下所有 k k k皆为常数)
x = k 2 ∗ m 2 + a 2 x=k_2*m_2+a_2 x=k2m2+a2

联立上面两个式子可得

k 1 ∗ m 1 + a 1 = k 2 ∗ m 2 + a 2 k_1*m_1+a_1=k_2*m_2+a_2 k1m1+a1=k2m2+a2

移项得:

k 1 ∗ m 1 − k 2 ∗ m 2 = a 2 − a 1 k_1*m_1-k_2*m_2=a_2-a_1 k1m1k2m2=a2a1

仔细观察以上式子,大家有没有联想到什么呢

是不是很像扩欧的式子 a ∗ x + b ∗ y = c a*x+b*y=c ax+by=c

(不清楚扩欧的可以点这里)

所以我们可以用扩欧求出 k 1 k_1 k1,再用 k 1 k_1 k1求出式子的特解 x 0 x_0 x0.

x = x 0 + l c m ( m 1 , m 2 ) ∗ k x=x_0+lcm(m_1,m_2)*k x=x0+lcm(m1,m2)k

∴ x ≡ x 0 ( m o d    l c m ( m 1 , m 2 ) \therefore x \equiv x_0(mod \;lcm(m_1,m_2) xx0(modlcm(m1,m2)

再将上面的同余式与第三个同余式及以下同余式合并,求出最小非负整数 x x x.

注意

1. 1. 1.虽然EX-CRT本身无法判断是否有解,但在用扩欧求出常数 k k k时,对于式子 a ∗ x + b ∗ y = c a*x+b*y=c ax+by=c,只有当 g c d ( a , b ) gcd(a,b) gcd(a,b)能够整除 c c c时,此式子才有解。

2. 2. 2.注意处理负数 ( x (x (x% m + m ) m+m) m+m)% m m m

例题

这个博主太懒了,待他整理整理再放。

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