鱼C论坛

 找回密码
 立即注册
查看: 2086|回复: 4

[已解决]每天一个小问题

[复制链接]
发表于 2021-4-23 23:25:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目为利用欧几里得算法求最大公约数
def gcd(x, y):
    while y:
        t = x % y
        x = y
        y = t

    return x
   
print(gcd(4, 6))


此代码从第二行开始就已经不懂了,为什么要用y进入循环?余数t为什么要赋值给y?y为什么要赋值给x?为什么最后返回x以后就能保证求得最大公约数?内在逻辑是怎么运行的?
我查过欧几里得算法求最大公约数,是2个整数中较小的那个数除以这2个整数相除的余数即为最大公约数,但是这个代码我完全找不到内在的逻辑,求解答


最佳答案
2021-4-23 23:28:07
def gcd(x, y):
    while y:     #y不为零时,开始循环;
        t = x % y  #一次循环,t =53 % 17 ,余数为2, t = 2;二次循环, t = 17/%2 = 1;三次循环,t = 2% 1 = 0;
        x = y        #一次循环,x = 17 ;二次循环,x = 2;三次循环 x = 1
        y = t        # 一次循环,y = 2 ; 二次循环 ,y = 1;三次循环 y = 0;跳出当前循环;
    return x          #返回x的值为17;返回x = 2 ;返回x的值为 1;
print(gcd(53, 17))                打印当前的值,也就是返回的X值,为1;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-23 23:28:07 | 显示全部楼层    本楼为最佳答案   
def gcd(x, y):
    while y:     #y不为零时,开始循环;
        t = x % y  #一次循环,t =53 % 17 ,余数为2, t = 2;二次循环, t = 17/%2 = 1;三次循环,t = 2% 1 = 0;
        x = y        #一次循环,x = 17 ;二次循环,x = 2;三次循环 x = 1
        y = t        # 一次循环,y = 2 ; 二次循环 ,y = 1;三次循环 y = 0;跳出当前循环;
    return x          #返回x的值为17;返回x = 2 ;返回x的值为 1;
print(gcd(53, 17))                打印当前的值,也就是返回的X值,为1;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-24 07:12:33 From FishC Mobile | 显示全部楼层
辗转相除法,搜一下
都不用搜索引擎的吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-24 07:26:59 | 显示全部楼层
辗转相除法,学到了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-24 08:13:43 | 显示全部楼层
你得知道欧几里得算法的原理啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 23:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表