📅  最后修改于: 2023-12-03 15:40:41.438000             🧑  作者: Mango
在数学中,最大公约数(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。