鱼C论坛

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

[已解决]关于求最大公约数

[复制链接]
发表于 2018-1-16 22:27:29 From FishC Mobile | 显示全部楼层 |阅读模式
20鱼币
def gcd(a, b):
    while a != 0:
        a, b = b % a, a
    return b

这一句代码看不明白a,b =b%a,a

小白求教

最佳答案
2018-1-16 22:27:30
本帖最后由 zero月蚀的假面 于 2018-1-16 23:18 编辑

首先你要明白它的原理,比如a=2322,b=462:
a=2322,b=462 ,a%b=12
a=462 , b=12 ,a%b= 6
a=12 , b=6 ,a%b = 0
可以看出第一次的除数(b) = 第二次的被除数(a),而第一次的余数(a%b) = 第二次的除数(b)
所以我们只需要求到每次的除数(b)和余数(a%b)即可
当最后除数(b)=(a%b)=0时停止,而此时的a就是我们要求的最大公约数(a)=(b)=6
  1. def gcd(a, b):   
  2. while b:        
  3.     a, b = b, a%b   
  4. return a
复制代码

a,b = b,a%b就是在while循环里面一直赋值求余数的过程,当b=0时才结束
即a = b,b = a%b

最佳答案

查看完整内容

首先你要明白它的原理,比如a=2322,b=462: a=2322,b=462 ,a%b=12 a=462 , b=12 ,a%b= 6 a=12 , b=6 ,a%b = 0 可以看出第一次的除数(b) = 第二次的被除数(a),而第一次的余数(a%b) = 第二次的除数(b) 所以我们只需要求到每次的除数(b)和余数(a%b)即可 当最后除数(b)=(a%b)=0时停止,而此时的a就是我们要求的最大公约数(a)=(b)=6 a,b = b,a%b就是在while循环里面一直赋值求余数的过程,当b=0时才结 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-16 22:27:30 | 显示全部楼层    本楼为最佳答案   
本帖最后由 zero月蚀的假面 于 2018-1-16 23:18 编辑

首先你要明白它的原理,比如a=2322,b=462:
a=2322,b=462 ,a%b=12
a=462 , b=12 ,a%b= 6
a=12 , b=6 ,a%b = 0
可以看出第一次的除数(b) = 第二次的被除数(a),而第一次的余数(a%b) = 第二次的除数(b)
所以我们只需要求到每次的除数(b)和余数(a%b)即可
当最后除数(b)=(a%b)=0时停止,而此时的a就是我们要求的最大公约数(a)=(b)=6
  1. def gcd(a, b):   
  2. while b:        
  3.     a, b = b, a%b   
  4. return a
复制代码

a,b = b,a%b就是在while循环里面一直赋值求余数的过程,当b=0时才结束
即a = b,b = a%b
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-16 22:36:52 | 显示全部楼层
相当于是两句
a=b%a
b=a
然后返回 b
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-16 22:38:40 | 显示全部楼层
这里用了辗转相除法, 又名欧几里德算法,循环来求得GCD,关于算法,详见https://baike.baidu.com/item/%E8%BE%97%E8%BD%AC%E7%9B%B8%E9%99%A4%E6%B3%95
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-2 18:54:19 From FishC Mobile | 显示全部楼层
你把代码改成这样就理解了
def gcd(a, b):
    while a != 0:
        temp=a  #暂存上一次除的除数
        a = b % a #存上一次除的余数
        b=temp
    print(b)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 01:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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