欧几里得算法及其证明

欧几里得算法是用来求两个数的最大公约数(greatest common divisor(gcd)),其具体过程如下:
a , b a,b a,b 两个正整数,现在按以下步骤求它们最大公约数,即 g c d ( a , b ) gcd(a,b) gcd(a,b) :
a   /   b      = q 1 ⋯ ⋯ r 1 a \ /\ b \ \;= q_1 \cdots\cdots r_1 a / b =q1r1
b   /   r 1    = q 2 ⋯ ⋯ r 2 b\ /\ r_1 \;= q_2 \cdots\cdots r_2 b / r1=q2r2
r 1 / r 2   = q 3 ⋯ ⋯ r 3 r_1 / r_2 \ = q_3 \cdots\cdots r_3 r1/r2 =q3r3
⋯ ⋯ \cdots\cdots
r m / r n = q t ⋯ ⋯ 0 r_m / r_n = q_t \cdots\cdots 0 rm/rn=qt0
如此反复迭代直至余数为0,最终得到的 r n r_n rn 就是 a , b a,b a,b 的最大公约数,这就是欧几里得算法。
欧几里得算法的证明可以转化为 g c d ( a , b ) = g c d ( b , r 1 ) = g c d ( r 1 , r 2 ) = ⋯ = g c d ( r m , r n ) gcd(a,b) = gcd(b,r_1) = gcd(r_1,r_2) = \cdots = gcd(r_m,r_n) gcd(a,b)=gcd(b,r1)=gcd(r1,r2)==gcd(rm,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) ,后面的式子同理可得,其证明如下:
前提公理:若 a = m d , b = n d a=md,b=nd a=md,b=nd( m 、 n 、 d 1 m、n、d_1 mnd1 为正整数),
     则 m , n m,n m,n 互质    ⟺    \iff d d d a 、 b a、b ab 的最大公约数。
假设 g c d ( a , b ) = d 1 gcd(a,b)=d_1 gcd(a,b)=d1 a 、 b a、b ab 最大公约数为 d 1 d_1 d1,并且有
a = m d 1 , b = n d 1 ( m 、 n 、 d 1 为 正 整 数 ) a = md_1 , b = nd_1(m、n、d_1为正整数) a=md1,b=nd1(mnd1)
又有 a = b q + r 1 , b = n d 1 a = bq + r_1, b = nd_1 a=bq+r1,b=nd1,则
r 1 = a − b q = ( m − n q ) d 1 r_1 = a -bq = (m-nq)d_1 r1=abq=(mnq)d1
现在只要证明 n 、 ( m − n q ) n、(m-nq) n(mnq) 互质再利用前提公理就可证明 g c d ( b , r 1 ) = d 1 gcd(b,r_1)=d_1 gcd(b,r1)=d1
假设 n 、 ( m − n q ) n、(m-nq) n(mnq)不是互质的,有 g c d ( n , m − n q ) = d 2 ( d 2 > 1 ) gcd(n,m-nq)=d_2 (d_2> 1) gcd(n,mnq)=d2(d2>1)
n = x d 2 , m − n q = y d 2 ( x 、 y 、 d 2 为 正 整 数 ) n=xd_2,m-nq = yd_2(x、y、d_2 为正整数) n=xd2,mnq=yd2(xyd2)

m = n q + y d 2 = ( x q + y ) d 2 m = nq + yd_2 = (xq + y)d_2 m=nq+yd2=(xq+y)d2
那么 a = m d = ( x q + y ) d 1 d 2 a = md =(xq+y)d_1d_2 a=md=(xq+y)d1d2
b = n d = x d 1 d 2 b = nd =xd_1d_2 b=nd=xd1d2
a 、 b a、b ab 的最大公约数变成 d 1 d 2 d_1d_2 d1d2 ,不符合假设条件 g c d ( a , b ) = d 1 gcd(a,b)=d_1 gcd(a,b)=d1 ,故 n 、 ( m − n q ) n、(m-nq) n(mnq) 互质。
由前提公理可得:
g c d ( b , r 1 ) = d 1 gcd(b,r_1)=d_1 gcd(b,r1)=d1

g c d ( a , b ) = g c d ( b , r 1 ) = d 1 gcd(a,b) = gcd(b,r_1) = d_1 gcd(a,b)=gcd(b,r1)=d1
由此证明欧几里得算法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值