欧几里德和stein两种算法求最大公约数

来源:互联网 发布:印章大师安装软件 编辑:程序博客网 时间:2024/05/16 14:24

1.欧几里德

原理:`gcd(x,y) = gcd(y,x%y)`

2.stein

原理:`gcd(k*x,k*y) = k*gcd(x,y)`

Python实现

#欧几里德辗转相除法求最大公约数def euclidGcd(x,y):    assert x >= 0 and y >= 0    if y == 0:        return x    return euclidGcd(y,x % y)#stein算法求最大公约数def steinGcd(x,y):    assert x >= 0 and y >= 0    if x == 0 or y == 0:        return abs(x-y)    if x % 2 == 0 and y % 2 == 0:        return 2 * steinGcd(x/2,y/2)    elif x % 2 == 0:        return steinGcd(x/2,y)    elif y % 2 == 0:        return steinGcd(x,y/2)    else:        return steinGcd(abs(x-y),min(x,y))if __name__ == '__main__':    for x,y in [(2,6),(6,2),(3,9),(2,5),(12,24)]:        print 'euclid:%-2d  stein:%-2d' % (euclidGcd(x,y),steinGcd(x,y))

输出

>>> euclid:2   stein:2 euclid:2   stein:2 euclid:3   stein:3 euclid:1   stein:1 euclid:12  stein:12
0 0
原创粉丝点击