鱼C论坛

 找回密码
 立即注册
查看: 3370|回复: 7

欧几里得-辗转相除法

[复制链接]
发表于 2016-6-24 18:18:21 | 显示全部楼层 |阅读模式
2鱼币
def gcd(x, y):
    while y:
        t = x % y
        x = y
        y = t

    return x
   
print(gcd(4, 6))

请问能帮忙解释下为什么  x = y  y = t 和返回x  
谢谢

最佳答案

查看完整内容

比如输入4和6,则 x=4,y=6 余数t=x%y=4%6=4 现在x=y=6,y=t=4,y=t=4不等于零,继续循环 t=x%y=6%4=2, x=y=4,y=t=2,还不为零,继续循环 t=x%y=4%2=0 x=y=2, y=t=0,循环结束。 return x,因x=y=2. 故返回结果2,即4和6的最大公约数为2
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-6-24 18:18:22 | 显示全部楼层
比如输入4和6,则
x=4,y=6
余数t=x%y=4%6=4
现在x=y=6,y=t=4,y=t=4不等于零,继续循环
t=x%y=6%4=2,
x=y=4,y=t=2,还不为零,继续循环
t=x%y=4%2=0
x=y=2,
y=t=0,循环结束。
return x,因x=y=2.
故返回结果2,即4和6的最大公约数为2
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-6-24 22:13:30 | 显示全部楼层
谢谢你让我多学了个算法,

相关原理
两个整数的最大公约数是能够同时整除它们的最大的正整数。
辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。
例如,252和105的最大公约数是21(252 = 21 × 12;105 = 21 × 5);
因为252 ÷105 = 2......42,所以(105,42)是21。在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至余数变为零。这时的除数就是所求的两个数的最大公约数。由辗转相除法也可以推出,两数的最大公约数可以用两数的整数倍相加来表示,如21 = 5 × 105 + (−2) × 252。这个重要的等式叫做贝祖等式(又称“裴蜀定理”)。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-6-25 10:44:30 | 显示全部楼层
这个算法为何不百度
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-6-27 18:47:30 | 显示全部楼层
和vvv 发表于 2016-6-24 18:18
比如输入4和6,则
x=4,y=6
余数t=x%y=4%6=4

谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-6-28 10:29:05 | 显示全部楼层
学到了……

感觉其实实现的东西并不复杂,加上名字逼格爆表……
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-6-28 11:26:41 | 显示全部楼层
看不懂呢,我感觉有点复杂,高中学得早忘记了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-7-4 08:48:57 | 显示全部楼层
谢谢分享
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-21 11:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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