Python实现求两数最大公约数(四种方法)
·
1. 辗转相除法(while循环实现)
(1) 两数求余temp = p % q
(2) temp = 0时,q为最大公约数
(3) temp !=0时,p = q;q = temp注:该循环的是否继续的判断条件就是temp是否为0
def fuc(p, q):
temp = p % q
while temp!=0:
p = q
temp = p
q = temp % q
return q
2.辗转相减法
(1) 如果p > q ,p = p - q
(2) 如果q > p ,q = q - p
(3) 假如p = q ,则 p或q 是最大公约数
(4) 如果p != q,则继续继续相减,直至p = q
def fuc2(p, q):
while p!=q:
if p>q:
p = p - q
else:
q = q - p
return p
3. 枚举法
(1) 将两数p,q中最小的放到smaller中
(2) 用p,q分别对i(1到smaller之间)求余数,看是否能被整除
(3) 直到p,q同时被i整除
(4) 如不能整除,i+1后继续,直到i等于smaller
def fuc3(p, q):
if p>q:
smaller = q
else:
smaller = p
for i in range(1, smaller+1):
if (p%i == 0) and (q%i == 0):
ret = i
return ret
4.欧几里得算法(辗转相除的递归实现)
该方法其实就是辗转相除法的递归版本实现
(1) 如果q=0,返回p;判断p>q
(2) 如果p>q,则p、q的最大公约数等于q与p%q的最大公约数,以此递归
def fuc4(p, q):
if q == 0:
return p
return fuc4(q, p % q)
第四种方法是不是代码最少,可以说是极简版,而且性能适中。但是当p,q数值较大时,递归效率效率可能就不太占优势了。
更多推荐
已为社区贡献7条内容
所有评论(0)