算法:求两个数最大公约数

算法:求两个数最大公约数

原来这是欧几里德先生的发明,无知了,在此记录。

#Python 求两数最大公约数
def gcd(a,b):
    if b == 0:
        return a
    return gcd(b,a%b) 

查了资料才明白,惭愧,理解方法:

     1.  如果 a<b ,则 a%b = a,返回 gcd(b,a).  所以无论如何都会转化为gcd(a,b)且a>b

     2.  a一定可写为 a = kb +r ,r为余数且 r = a - kb

  设最大公约数为 d ,则 a,b都能被 d 整除,则 r 定能被 d 整除。得:gcd(a,b) = gcd(b,r) = gcd(b,a%b)

  可快速缩小d的取值范围

     3.  a,b之间差距越来越小,b能整除a,及r=0。最多步骤是除到 b = 1。


总结:思想提高效率,我还是老老实实多学算法吧。

转载于:https://www.cnblogs.com/boboidream/p/4875936.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值