【python】使用二进制求解最大公约数?

题目:两个整数x,y,它们的最大公约数d必须满足d|x,而且d|y。其中符号“|”表示整除,d|x表示x是d的倍数,或者说x能够整除d。要求设计一个算法来计算最大公约数,算法不能使用乘法,除法和求余运算。

分析:假设有两个整数a,b,其中a>b,求它们的最大公约数。先求两数相除后的余数,于是先对a,b进行求余运算。假设他们相除后余数是d,即d = a % b,那么a,b的最大公约数就等于b,d的最大公约数。

code:

def gcd(a, b):

    if a % b == 0:

        return b

    d = a % b

    return gcd(b, d)

a = 128

b = 48

print("the greatest common divisor of {0} and {1} is :{2}".format(a, b, gcd(a, b)))

程序运行结果:

the greatest common divisor of 128 and 48 is :16

你可能感兴趣的:(【python】使用二进制求解最大公约数?)