17课课后作业:最大公约数的问题
1. 编写一个函数,利用欧几里得算法(脑补链接)求最大公约数,例如 gcd(x, y) 返回值为参数 x 和参数 y 的最大公约数。def gcd(x, y):
while y:
t = x % y
x = y
y = t
return x
print(gcd(4, 6))
以上是小甲鱼原代码,但真心表示难以理解,望表达能力强、关爱小白人士帮我理下思路,感谢! 可以百度一下欧几里得算法(或辗转相除法) 这是著名的欧几里得算法也叫辗转相除法,是求取最大公约数的一种方法。
首先,以 x 对 y 取余,如果余数为 0 那么 y 便是最大公约数,否则,让 y 成为 x,余数成为 y 继续上述取余操作,直到余数为零。
def gcd(x, y):
while y: # 如果除数(同时,也是前一次取余操作的余数) y 不为零就继续循环
t = x % y # x 对 y 取余
x = y # 准备下一次循环,除数 y 成为新被除数 x
y = t # 准备下一次循环,余数 t 成为新除数 y
return x # 返回除数 y 也就是最大公约数
请参考百度百科 https://baike.baidu.com/item/%E6%AC%A7%E5%87%A0%E9%87%8C%E5%BE%B7%E7%AE%97%E6%B3%95 jackz007 发表于 2020-11-9 19:34
这是著名的欧几里得算法也叫辗转相除法,是求取最大公约数的一种方法。
首先,以 x 对 y 取余,如 ...
不甚明,但觉历!容我消化下,非常感谢~ liuzhengyuan 发表于 2020-11-9 19:18
可以百度一下欧几里得算法(或辗转相除法)
好的,这就去了解~
页:
[1]