欧几里得算法和更相减损术证明

欧几里得算法
gcd(greatest common divisor) 最大公约数,指两个整数所有公共约数中最大的。
首先先上结论,求最大公约数,我们可以通过递归c=a%b,gcd(a,b)=gcd(b,c),c=0时返回b计算,复杂度是log(n)
很明显,这个伟大的结论gcd(a,b)=gcd(b,a%b),就是著名的欧几里得公式。
那么怎么证,其实还挺简单的。我们把证明分为两步骤:

  • 1、证明gcd(a,b)是b,a%b的一个公约数
  • 2、证明这个公约数是最大的。

1、我们设gcd(a,b)=d,a>b,再令a=k1d,b=k2d.
我们再设,a=kb+c(也就是a除以b商k余c),那么c就是余数,也就是a%b.
将上面那个式子移项,得到c=a-k
b,然后再把a=k1d,b=k2d,这两个式子里的a、b带入式子,得到:
c=k1d-kk2d,再提取公因数d,得到c=(k1-kk2)d.这样就说明,c(也就是a%b)有d这个约数,因为开始我们设b也有d这个约数,所以gcd(a,b)是b,a%b的一个公约数。
2、现在知道了它是一个公约数,那么怎么证它是最大的?(其实感性分析,a%b都变小了,公约数不可能更大呀!)
  但是数学是一门严谨的学科,我们要严谨证明。我们知道,c(a%b)=(k1-k
k2)d,b=k2d,我们只需要证明k1-kk2、k2互质就好了。
这里可以用到反证法:我们假设k1-k
k2=qt,k2=pt,并且t>1(也就是那两个不互质)。
我们将前面那个式子移项,得到k1=qt+kk2,再把这个k1代到最开始的a=k1d,得到a=(qt+kk2)d,再利用乘法分配律,得到:
  a=q
t
d+kk2d,这时,我们再把k2=pt带入上式,得到a=qtd+kptd.提取公因数:a=(q+kp)td
  现在,再和b=ptd比较,发现他们的最大公因数变成了t*d和开始矛盾,所以假设不成立,反证成功!
更相减损术
不妨设A>B,设A和B的最大公约数为X,所以 A=aX,B=bx,其中a和b都为正整数,且a>b。
C = A-B,则有:
C=aX−bX=(a−b)X

因为a和b均为正整数,所以C也能被X整除,即A、B、C最大公约数均为X
所以gcd(A,B) = gcd(B,A-B)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

东心十

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

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

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

打赏作者

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

抵扣说明:

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

余额充值