题解 | 最大公约数 | 辗转相除法&更相减损术
最大公约数
http://www.nowcoder.com/practice/cf4091ca75ca47958182dae85369c82c
方法一:辗转相除法
a
, b
的最大公约数为 b
与 a/b的余数
的最大公约数相等。
方法二:更相减损术
出自《九章算术》,核心思想是大数减小数,直到差和减数相等。
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 求出a、b的最大公约数。
# @param a int
# @param b int
# @return int
#
class Solution:
def gcd(self , a , b ):
# write code here
if a % b == 0:
return b
else:
return self.gcd(b, a % b)
class Solution:
def gcd(self , a , b ):
# 两数相等直接返回
if a == b:
return b
while True:
big = max(a, b)
small = min(a, b)
if small * 2 == big:
return small
else:
a, b = small, big - small