📜  求两个数的gcd的Python程序(1)

📅  最后修改于: 2023-12-03 15:40:41.438000             🧑  作者: Mango

Python程序之求两个数的gcd

在数学中,最大公约数(Greatest Common Divisor,简称gcd)是指在一组数中,能够同时整除这组数的最大正整数。本篇文章将为大家介绍如何使用Python编写求两个数的gcd的程序。

实现方法

有很多种方法可以用来求两个数的gcd,这里介绍几种方法。

辗转相除法

辗转相除法也叫欧几里德算法。欧几里德算法最初是用来求两个整数的最大公约数。它的基本思想是:用较小的数去除较大的数,再用得到的余数去除较小的数,如此反复进行,直到余数为零时,最后的被除数就是两个数的最大公约数。

下面是使用辗转相除法求两个数的gcd的Python程序代码:

def gcd(a, b):
    if b == 0:
        return a
    else:
        return gcd(b, a % b)
更相减损法

更相减损法又叫减法求最大公约数法。它的基本思想是:用较大的数减去较小的数,接着用得到的差值去减较小的数,如此反复进行,直到减数和差相等为止,最后的减数即为它们的最大公约数。

下面是使用更相减损法求两个数的gcd的Python程序代码:

def gcd(a, b):
    if a == b:
        return a
    elif a > b:
        return gcd(a-b,b)
    else:
        return gcd(a,b-a)
最优解:辗转相减法和移位结合

辗转相减法和移位结合法是一种常用的求两个数的gcd的方法。它的基本思想是:当a和b都是偶数时,gcd(a, b)=2×gcd(a/2, b/2);当a是奇数,b是偶数时,gcd(a, b)=gcd(a, b/2);当b是奇数,a是偶数时,gcd(a, b)=gcd(a/2, b);当a和b都是奇数时,gcd(a, b)=gcd(|a-b|/2, min(a,b))。

下面是使用辗转相减法和移位结合法求两个数的gcd的Python程序代码:

def gcd(a, b):
    if a == 0:
        return b
    elif b == 0:
        return a
    elif a % 2 == 0 and b % 2 == 0:
        return 2 * gcd(a // 2, b // 2)
    elif a % 2 == 0 and b % 2 == 1:
        return gcd(a // 2, b)
    elif a % 2 == 1 and b % 2 == 0:
        return gcd(a, b // 2)
    elif a % 2 == 1 and b % 2 == 1:
        return gcd(abs(a - b) // 2, min(a, b))
总结

以上就是三种求两个数的gcd的Python程序。辗转相除法和更相减损法是较为朴素的方法,而辗转相减法和移位结合法则是最优解,它结合了两种朴素的方法,能够更快速地求出gcd。