最大公约数(GCD)

最大公约数(GCD)

求整数 a、b 的最大公约数,就是求同时满足 a%c=0、b%c=0 的最大正 整数 c,即求能够同时整除 a 和 b 的最大正整数 c。
在介绍欧几里得算法之前, 读者可能会有这样的思路:
若 a、b 均不为 0,则依次遍历不大于 a(或 b)的所有正整数,依次试验它是否同时满足两式,并在所有满足两式的正整数中挑选最 大的那个即是所求;
若 a、b 其中有一个为 0,那么最大公约数即为 a、b 中非零 的那个;
若 a、b 均为 0,则最大公约数不存在(任意数均可同时整除它们)。
这个朴素的思路是完全正确的,它的确能够正确的求得两个数的最大公约数。但是,该解法在大部分情况下要遍历不大于 a(或 b)的所有正整数,并依次测试它们是否满足条件,当 a 和 b 数值较大时(如 10000000)该算法的时间复杂度较高,耗费的时间较多,往往不能在指定时间内得到结果。

下面介绍一种更高效的方法:
若整数g为a,b(不同时为0)的公约数,则g满足:

a = g * l
b = g * m

其中l,m为整数。同时a可由b表示为下式:

a = b * k + r

其中k为整数,r为a除以b后的余数。那么对如上三式做如下变形:

g * l = g * m * k + r
r = g * (l - 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值