zmq 发表于 2020-8-6 21:46:42

17课后题


1. 编写一个函数,利用欧几里得算法(脑补链接)求最大公约数,例如 gcd(x, y) 返回值为参数 x 和参数 y 的最大公约数。

在百度上看到一个代码不是很懂,小甲鱼的答案我懂,我也是那样写的。
百度上:
def gcd(a,b):
        while a != 0:
                a,b=b%a,a
        return b

这个代码有人能实现,但是不是很理解a,b=b%a,a 难道不应该是a,b=a%b, a吗???

baige 发表于 2020-8-6 21:49:47

本帖最后由 baige 于 2020-8-6 22:06 编辑

欧几里德算法又称辗转相除法,是指用于计算两个正整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。
换成这上面说的就是下面这个程序
a是较大的值,b是较小的值
def gcd(a,b):
         while b != 0:
               a,b=b,a%b
         return a
然后你上面的程序就是把gcd()里面参数的位置换了一下
也就是你上面的程序b较大的值,a是较小的值

baige 发表于 2020-8-6 22:16:34

详情请看https://fishc.com.cn/forum.php?mod=viewthread&tid=126144&highlight=17%BD%B2
页: [1]
查看完整版本: 17课后题