扩展欧几里德算法

g c d ( a , b ) = 1 , 求 a x + b y = 1 , a > b gcd(a,b)=1,求ax+by=1,a>b gcd(a,b)=1,ax+by=1,a>b,找出满足条件的 x , y x,y x,y
递归反推思路
1 = a x 0 + b y 0 = b x 1 + a % b x 2 = . . . = 1 x n + 0 y n \begin{align} 1&=ax_0+by_0\\ &=bx_1+a\%bx_2\\ &=...\\ &=1x_n+0y_n \end{align} 1=ax0+by0=bx1+a%bx2=...=1xn+0yn
a x 0 + b y 0 = b x 1 + a % b y 1 → a x 0 + b y 0 = b x 1 + ( a − a / b ∗ b ) y 1 → a x 0 + b y 0 = a y 1 + b ( x 1 − a / b y 1 ) → x 0 = y 1 , y 0 = x 1 − a / b y 1 ax_0+by_0=bx_1+a\%by_1 \rightarrow\\ ax_0+by_0=bx_1+(a-a/b*b)y_1\rightarrow\\ ax_0+by_0=ay_1+b(x_1-a/by_1)\rightarrow\\ x_0=y_1,y_0=x_1-a/by_1 ax0+by0=bx1+a%by1ax0+by0=bx1+(aa/bb)y1ax0+by0=ay1+b(x1a/by1)x0=y1,y0=x1a/by1

迭代思路
a = b q 1 + r 1 b = r 1 q 2 + r 2 r 1 = r 2 q 3 + r 3 r 2 = r 3 q 4 + r 4 . . . r k − 1 = r k q k + 1 + r k + 1 a=bq_1+r_1\\ b=r_1q_2+r_2\\ r_1=r_2q_3+r_3\\ r_2=r_3q_4+r_4\\ ...\\ r_{k-1}=r_{k}q_{k+1}+r_{k+1} a=bq1+r1b=r1q2+r2r1=r2q3+r3r2=r3q4+r4...rk1=rkqk+1+rk+1
上文的求解过程中, r i r_i ri最终会缩减到 → g c d ( a , b ) → 0 \rightarrow gcd(a,b)\rightarrow 0 gcd(a,b)0
r i = a λ i + b β i r_i=a\lambda_i+b\beta_i ri=aλi+bβi。注意 g c d ( a , b ) = 1 gcd(a,b)=1 gcd(a,b)=1,故左式一定可以成立。
则有
r i + 1 = r i − 1 − q i + 1 r i r_{i+1}=r_{i-1}-q_{i+1}r_i ri+1=ri1qi+1ri
因而有
a λ i + 1 + b β i + 1 = a λ i − 1 + b β i − 1 − q i + 1 ( a λ i + b β i ) = a ( λ i − 1 − q i + 1 λ i ) + b ( β i − 1 − q i + 1 β i ) \begin{align} a\lambda_{i+1}+b\beta_{i+1}&=a\lambda_{i-1}+b\beta_{i-1}-q_{i+1}(a\lambda_i+b\beta_i)\\ &=a(\lambda_{i-1}-q_{i+1}\lambda_{i})+b(\beta_{i-1}-q_{i+1}\beta_i) \end{align} aλi+1+bβi+1=aλi1+bβi1qi+1(aλi+bβi)=a(λi1qi+1λi)+b(βi1qi+1βi)
故有 λ i + 1 = ( λ i − 1 − q i + 1 λ i ) , β i + 1 = b ( β i − 1 − q i + 1 β i ) \lambda_{i+1}=(\lambda_{i-1}-q_{i+1}\lambda_i),\beta_{i+1}=b(\beta_{i-1}-q_{i+1}\beta_i) λi+1=(λi1qi+1λi),βi+1=b(βi1qi+1βi)
注意到上面的式子仅开头两个格式有点不统一,令 a = r − 1 , b = r 0 a=r_{-1},b=r_0 a=r1,b=r0。则形式统一。其中 q i + 1 = r i − 1 / r i q_{i+1}=r_{i-1}/r_i qi+1=ri1/ri

代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值