欧几里得算法、证明及扩展,看这一篇就够了

本文介绍了欧几里得算法,用于求解两个整数的最大公因数。通过形式化描述、算法证明和扩展讨论,阐述了算法原理,并提供了代码实现。证明了算法返回的数确实为公因数,并展示了如何通过算法得到a和b的线性组合。
摘要由CSDN通过智能技术生成

数学的力量是伟大的,也是美丽的。 —— 本人说的

本文算是对中佛罗里达大学提供的对欧几里得算法证明的翻译,想看英文证明的, 这里是链接>英文材料<

欧几里得算法 (Euclid’s Algorithm)

众所周知,大名鼎鼎的欧几里得是为了求两个整数之间的最大公因数,也就是所谓的辗转相除法了,在下面的内容中,我将分别从欧几里得算法证明、欧几里得算法扩展和代码实现来介绍。先作一个约定,若一个数p可以被q整除,也就是说q除以p余数为0,我们记 p | q

最大公因数

我们记gcd(a,b)为a和b之间的最大公因数,gcd denotesgreatest common divisor,如果一个整数c是a和b的最大公因数,那么必然满足以下两条规格:

  1. c | a 且c | b
  2. 对于任何a和b的公共因数d,d | c

实际上,规则2保证了规则1中的c就是a和b的最大公因数

形式化描述

欧几里得算法的形式化描述如下,其中所有的字母都代表整数:
a = q 1 b + r 1 , 其 中 0 &lt; r 1 &lt; b a = q_1b + r_1, 其中 0 &lt; r_1&lt; b a=q1b+r1,0<r1<b

b = q 2 r 1 + r 2 , 其 中 0 &lt; r 2 &lt; r 1 b = q_2r_1 + r_2, 其中 0 &lt; r_2&lt; r_1 b=q2r1+r2,0<r2<r1

r 1 = q 3 r 2 + r 3 , 其 中 0 &lt; r 3 &lt; r 2 r_1 = q_3r_2 + r_3, 其中 0 &lt; r_3 &lt; r_2 r1=q3r2+r3,0<r3<r2

. . . ... ...

r i = q i + 2 r i + 1 + r i + 2 , 其 中 0 &lt; r i + 2 &lt; r i + 1 r_i = q_{i+2}r_{i+1} + r_{i+2}, 其中 0 &lt; r_{i+2} &lt; r_{i+1} ri=qi+2ri+1+ri+2,0<ri+2<ri+1

. . . ... ...

r k − 1 = q k + 1 r k r_{k-1}=q_{k+1}r_k rk1=qk+1rk

g c d ( a , b ) = r k gcd(a,b)=r_k gcd(a,b)=rk

也就是说, gcd(a,b)= gcd(b,a%b),一直递归处理到a%b,那时对应的被除数/除数就是最大公因数c了。

考虑以下这个例子,GCD(125, 87)
125 = 1*87 + 38
87	= 2*38 + 11
38	= 3*11 + 5
11  = 2*5  + 1
5	= 5*1

所以,GCD(125, 87)=1

证明

证明gcd返回的是a和b之间的最大公因数,我们可以分两步来证明:

  • 1.首先,我们证明,gcd返回的数确实是a和b之间的公因数

回顾一下上面的公式:
a = q 1 b + r 1 , 其 中 0 &lt; r 1 &lt; b a = q_1b + r_1, 其中 0 &lt; r_1&lt; b a=q1b+r1,0<r1<b

b = q 2 r 1 + r 2 , 其 中 0 &lt; r 2 &lt; r 1 b = q_2r_1 + r_2, 其中 0 &lt; r_2&lt; r_1 b=q2r1+r2,0<r2<r1

r 1 = q 3 r 2 + r 3 , 其 中 0 &lt; r 3 &lt; r 2 r_1 = q_3r_2 + r_3, 其中 0 &lt; r_3 &lt; r_2 r1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值