鱼C论坛

 找回密码
 立即注册
查看: 2652|回复: 6

求最大公约数

[复制链接]
发表于 2017-3-25 16:33:55 | 显示全部楼层 |阅读模式

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

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

x
def gcd(x, y):
    while y:
        t = x % y
        x = y
        y = t

    return x
   
print(gcd(4, 6))
求这题有别的方法做?作者能不能发点刚入门的人一点一下能反应过来的代码?????????????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-25 16:55:45 | 显示全部楼层
  1. def gcd(a, b):
  2. if a < b:
  3.   a, b = b, a

  4. while b != 0:
  5.   temp = a % b
  6.   a = b
  7.   b = temp

  8. return a
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-26 01:25:06 | 显示全部楼层
不知道你说的能看懂是个什么概念,我就按照数学的逻辑来写一个很长,但是很通俗易懂的吧
但愿我没有把公约数的概念记错
  1. def gcd(x,y):
  2.     # 公约数不止一个,所以应该是个列表,先定义这个列表为the_nums
  3.     the_nums = []
  4.     # 得到x的所有约数,也是个列表,定义为x_nums
  5.     x_nums = []
  6.     # 把a当做x的约数,那a肯定满足如下条件,即2<=a<=x,表达方式如下
  7.     for a in range(2,x+1):
  8.         # 约数还有一个条件就是整除,表达成这样
  9.         if x % a == 0:
  10.             # 好了,通过上述2个条件就得到了所有满足条件的a,也就是x的所有约数,加入的列表中
  11.             x_nums.append(a)
  12.     # 同理,可以得到y的约数集合
  13.     y_nums = []
  14.     for b in range(2,y+1):
  15.         if y % b == 0:
  16.             y_nums.append(b)
  17.     # 接下来就是公约数了,定义为t,它应该满足同时在x和y的约数集合中,表达如下
  18.     for t in x_nums:
  19.         if t in y_nums:
  20.             # 把所有满足条件的t加入到最开始定义的列表中
  21.             the_nums.append(t)
  22.     return the_nums

  23. # 测试一下:
  24. print(gcd(6,4))
  25. # >>>[2]
  26. print(gcd(20,40))
  27. # >>>[3]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-26 01:26:48 | 显示全部楼层
gopythoner 发表于 2017-3-26 01:25
不知道你说的能看懂是个什么概念,我就按照数学的逻辑来写一个很长,但是很通俗易懂的吧
但愿我没有把公约 ...

gcd(20,40)的答案应该是这个,我复制错了
[2, 4, 5, 10, 20]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-26 14:58:02 | 显示全部楼层
gopythoner 发表于 2017-3-26 01:25
不知道你说的能看懂是个什么概念,我就按照数学的逻辑来写一个很长,但是很通俗易懂的吧
但愿我没有把公约 ...

谢谢 很好懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-13 16:11:31 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-13 16:34:01 | 显示全部楼层
那道课后习题的要求是让你根据那个啥公理的方式来求解.......
你把公理看懂了 ,也就知道大概的逻辑了
# def gcd(x,y):
#    if x == 0 or y ==0:
#        return max(x,y)
#    minx = x if x<y else y
#    return gcd(minx,x%y)   
#  
# print gcd(18,9)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-25 01:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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