问题:
给定2n整数 a 1 , a 2 . . . a n , b 1 , b 2 . . . b n a_1,a_2...a_n, b_1,b_2...b_n a1,a2...an,b1,b2...bn,求一个最小整数 x x x满足 x ≡ a i ( m o d b i ) x\equiv a_i(mod\ b_i) x≡ai(mod bi)
思路:
先研究两个同余方程:
{ x ≡ a 1 ( m o d b 1 ) x ≡ a 2 ( m o d b 2 ) \left\{ \begin{aligned} x \equiv a_1(mod\ b_1)\\ x \equiv a_2(mod\ b_2) \end{aligned} \right. {x≡a1(mod b1)x≡a2(mod b2)
1: 我们对他进行一下变形(其中 k 1 , k 2 k_1,k_2 k1,k2均为整数):
{ x = b 1 ∗ k 1 + a 1 x = b 2 ∗ k 2 + a 2 \left\{ \begin{aligned} x =b_1 * k_1 + a_1\\ x = b_2 * k_2 + a_2 \end{aligned} \right. {x=b1∗k1+a1x=b2∗k2+a2
2:联立消去x并且移项:
(1) b 1 ∗ k 1 + a 1 = b 2 ∗ k 2 + a 2 b_1*k_1 + a_1 = b_2*k_2 + a_2 b1∗k1+a1=b2∗k2+a2
(2) b 1 ∗ k 1 − b 2 ∗ k 2 = a 2 − a 1 b_1*k_1 - b_2*k_2 = a_2 - a_1 b1∗k1−b2∗k2=a2−a1
3:对于上式我们可以用扩展欧几里得求出它的一组解(这里 k 1 , k 2 k_1,k_2 k1,k2相当于 x , y x,y x,y)。解出 k 1 = K 0 k_1 = K_0 k1=K0后我们立马可以得到 x = b 1 ∗ K + a 1 x = b_1*K + a_1 x=b1∗K+a1
4: 对于 x x x可以写出它的通解,并且整理:
(1) x = b 1 ∗ ( K 0 + k ∗ b 2 g c d ( b 1 , b 2 ) ) + a 1 x = b_1*(K_0 + k *\frac{b_2}{gcd(b_1,b_2)}) + a_1 x=b1∗(K0+k∗gcd(b1,b2)b2)+a1
(2) x = b 1 ∗ K 0 + a 1 + k ∗ l c m ( b 1 , b 2 ) x = b_1*K_0 + a_1 + k *lcm(b_1,b_2) x=b1∗K0+a1+k∗lcm(b1,b2)
5:设 A 0 = b 1 ∗ K 0 + a 1 , B 0 = l c m ( b 1 , b 2 ) A_0 = b_1*K_0 +a_1,B_0 =lcm(b_1,b_2) A0=b1∗K0+a1,B0=lcm(b1,b2)得:
x = k ∗ B 0 + A 0 x = k*B_0+A_0 x=k∗B0+A0
到了这里就可以发现和1的式子形式完全相同,所以就可以地推下去求解x了,对于这个方程组是否有解就看在求的过程中 g c d ( b i , b i + 1 ) ∣ a i + 1 − a i gcd(b_i,b_{i + 1})|a_{i + 1} - ai gcd(bi,bi+1)∣ai+1−ai是否成立了