中国剩余定理(孙子定理)

问题:

给定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) xai(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. {xa1(mod b1)xa2(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=b1k1+a1x=b2k2+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 b1k1+a1=b2k2+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 b1k1b2k2=a2a1

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=b1K+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+kgcd(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=b1K0+a1+klcm(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=b1K0+a1,B0=lcm(b1,b2)得:

x = k ∗ B 0 + A 0 x = k*B_0+A_0 x=kB0+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+1ai是否成立了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值