再论最大公约数算法

接前面

欧几里得算法里面讲了求最大公约数的算法,还有更适用于计算机的算法。

正文

再论最大公约数算法再论最大公约数算法

代码

#template<BinaryInteger N>
def even(n):
    return 0==n&0x1
def stein_gcd(m,n):
    if m<0: m = -m
    if n<0: n = -n
    if 0==m: return n
    if 0==n: return m
    #m>0&&n>0
    d_m = 0
    while even(m):
        m >>= 1
        d_m += 1
    d_n = 0
    while even(n):
        n >>= 1
        d_n += 1
    #odd(m)&&odd(n)
    while m!=n:
        if n>m:n,m=m,n
        m -= n
        m >>= 1
        while even(m):m>>=1
    return m << min(d_m,d_n)

判断偶数

用的是位操作,跟之前的odd一样。没有用除以2的方法。

比较

前面文章里同时求出了商和余数,这次只求最大公约数。

再论最大公约数算法比较

没有余数的时候,最大公约数是小的数。比如14和7的最大公约数是7。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值