思路
1、辗转相除法-递归法
两个非负整数 x,y (x>y)
gcd(x,y)=gcd(y,x%y)
拓展:
最小公倍数 lcm(x,y) =(x*y)/gcd(x,y)
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 求出a、b的最大公约数。
# @param a int整型
# @param b int整型
# @return int整型
#
class Solution:
def gcd(self , a: int, b: int) -> int:
# 法1 辗转相除
if a%b==0:
return b
else:
return self.gcd(b, a%b)
2、辗转相除-迭代法
力扣上类似题目:找出数组的最大公约数
class Solution:
def findGCD(self, nums: List[int]) -> int:
def gcd(x,y):
# 辗转相除,迭代法
#满足x>=y
while y:
x,y=y,x%y
return x
x,y=max(nums),min(nums)
return gcd(x,y)