谈谈求解最大公约数的欧几里得算法

问题:给定两个整数a和b,求解他们的最大公约数。

求解方法网上已经有很多资料,这里只是谈谈求解方法的证明:

a可以写成a=kb+r(0<=r<b),这里设最大公约数永为正数,因此不管a、b的正负性,也不管a的绝对值是否小于b的绝对值(当小于时k为0,r等于a,最终的效果是一样的)。假设c是公约数,则a=mc,b=nc,r=a-kb=mc-knc=(m-kn)c,m-kn一定是个整数,因此c是a、b、r的公约数,进一步得到a与b的公约数等于b与r的公约数,即a mod c = b mod c = r mod c = 0,简化成符号表示为cd(a,b)=cd(b, a mod b)。

下面是如何求得最大公约数,假设a mod b不为0则继续使用该公式b变成a,a mod b变成b,最后成为cd(b, a mod b)=cd(a mod b,b mod (a mod b)),这就是递归公式。那么最后假设a mod b等于0,那就是说明a与b的公约数就是b,而这个b也是求得的最大公约数,因此递归公式停止的条件是a mod b=0。

转载于:https://my.oschina.net/u/1268334/blog/2996620

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值