数论5-辗转相除法(扩展欧几里得算法)

点个关注吧,谢谢!

目的: 给定整数 a , b ; a > b a,b;a>b a,b;a>b,通过有限步 n n n次带余除法,使得最后的余数为0,而第 n − 1 n-1 n1次的余数便是 a , b a,b a,b的最大公因数

通过下面一系列带余除法,求得最后余数为0:
a = b q 1 + r 1 a=bq_1+r_1 a=bq1+r1
b = r 1 q 2 + r 2 b=r_1q_2+r_2 b=r1q2+r2
r 1 = r 2 q 3 + r 3 r_1=r_2q_3+r_3 r1=r2q3+r3
. . . . .... ....
r n − 1 = r n q n + 1 + r n + 1 , r n + 1 = 0 r_{n-1}=r_nq_{n+1}+r_{n+1},r_{n+1}=0 rn1=rnqn+1+rn+1,rn+1=0
带余除法的性质知道: 0 ≤ r n + 1 < r n < . . . < r 1 < ∣ b ∣ 0 \le r_{n+1}<r_n<...<r_1<|b| 0rn+1<rn<...<r1<b

通过上述辗转相除法,可得 g c d ( a , b ) = r n gcd(a,b)=r_n gcd(a,b)=rn
原理: g c d ( a , b ) = g c d ( b , r 1 ) , . . . , = g c d ( r n − 1 , r n ) gcd(a,b)=gcd(b,r_1),...,=gcd(r_{n-1},r_n) gcd(a,b)=gcd(b,r1),...,=gcd(rn1,rn)
因为最后一步 r n + 1 = 0 r_{n+1}=0 rn+1=0,所以 g c d ( r n − 1 , r n ) = g c d ( r n q n + 1 , r n ) = r n gcd(r_{n-1},r_n)=gcd(r_nq_{n+1},r_n)=r_n gcd(rn1,rn)=gcd(rnqn+1,rn)=rn

现证明: g c d ( a , b ) = g c d ( b , r 1 ) gcd(a,b)=gcd(b,r_1) gcd(a,b)=gcd(b,r1)
g c d ( a , b ) ∣ a , g c d ( a , b ) ∣ b , r 1 = a − b q 1 → g c d ( a , b ) ∣ r 1 , 且 g c d ( a , b ) ∣ r , → g c d ( a , b ) ∣ g c d ( b , r 1 ) gcd(a,b)|a,gcd(a,b)|b,r_1=a-bq_1\rightarrow gcd(a,b)|r_1,且gcd(a,b)|r,\rightarrow gcd(a,b)|gcd(b,r_1) gcd(a,b)a,gcd(a,b)b,r1=abq1gcd(a,b)r1,gcd(a,b)r,gcd(a,b)gcd(b,r1)
同理 g c d ( b , r 1 ) ∣ g c d ( a , b ) gcd(b,r_1)|gcd(a,b) gcd(b,r1)gcd(a,b)
所以 g c d ( b , r 1 ) = g c d ( a , b ) gcd(b,r_1)=gcd(a,b) gcd(b,r1)=gcd(a,b)

性质:
1.若 a , b a,b a,b中有负数,直接把负数变为正数来求最大公因数。
证:即需证明 g c d ( a , b ) = g c d ( a , − b ) gcd(a,b)=gcd(a,-b) gcd(a,b)=gcd(a,b)
直接用定义证明:设 g c d ( a , b ) = k gcd(a,b)=k gcd(a,b)=k,那么 a = r 1 k , b = r 2 k , r 1 , r 2 互素 a=r_1k,b=r_2k,r_1,r_2互素 a=r1k,b=r2kr1,r2互素
对于 a , − b a,-b a,b a = r 1 k , − b = − r 2 k ; g c d ( a , − b ) = k a=r_1k,-b=-r_2k; gcd(a,-b)=k a=r1k,b=r2kgcd(a,b)=k

2.对任意 a , b a,b a,b,有整数 s , y s,y s,y使得 g c d ( a , b ) = x a + y b gcd(a,b)=xa+yb gcd(a,b)=xa+yb
证:利用上述辗转相除法,反推:

r 1 = a − q 1 b r_1=a-q_1b r1=aq1b
r 2 = b − r 1 q 2 = b − ( a − q 1 b ) q 2 = − q 2 a + ( 1 + q 1 q 2 ) b r_2=b-r_1q_2=b-(a-q_1b)q_2=-q_2a+(1+q_1q_2)b r2=br1q2=b(aq1b)q2=q2a+(1+q1q2)b
. . . ... ...
每一步都能反推,最后得到
g c d ( a , b ) = r n = x n a + y n b gcd(a,b)=r_n=x_na+y_nb gcd(a,b)=rn=xna+ynb

举例
辗转相除法求 g c d ( 210 , − 33 ) gcd(210,-33) gcd(210,33)
g c d ( 210 , − 33 ) = g c d ( 210 , 33 ) gcd(210,-33)=gcd(210,33) gcd(210,33)=gcd(210,33)
210 = 33 ∗ 6 + 12 210=33*6+12 210=336+12
33 = 12 ∗ 2 + 9 33=12*2+9 33=122+9
12 = 9 ∗ 1 + 3 12=9*1+3 12=91+3
9 = 3 ∗ 3 + 0 9=3*3+0 9=33+0
g c d ( 210 , 33 ) = 3 gcd(210,33)=3 gcd(210,33)=3

g c d ( 210 , − 33 ) = 210 x − 33 y gcd(210,-33)=210x-33y gcd(210,33)=210x33y
3 = 12 − 9 ∗ 1 3=12-9*1 3=1291
= 12 − ( 33 − 12 ∗ 2 ) ∗ 1 = − 33 + 12 ∗ 3 =12-(33-12*2)*1=-33+12*3 =12(33122)1=33+123
= − 33 + ( 210 − 33 ∗ 6 ) ∗ 3 = 210 ∗ 3 + ( − 33 ) ∗ 19 =-33+(210-33*6)*3=210*3+(-33)*19 =33+(210336)3=2103+(33)19
所以 x = 3 , y = 19 x=3,y=19 x=3,y=19

  • 29
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅逼码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值