鱼C论坛

 找回密码
 立即注册
查看: 1187|回复: 5

[已解决]求最大公约数和最小公倍数

[复制链接]
发表于 2020-5-12 14:03:43 | 显示全部楼层 |阅读模式
5鱼币
num1 = int(input('请输入一个正整数:'))
num2 = int(input('请输入另一个正整数:'))
if num1 > num2:
    num1,num2 = num2,num1
for d in range(num1,0,-1):
    if num1 % d == 0 and num2 % d == 0:
        print('%d和%d的最大公约数是%d'%(num1,num2,d))
        print('%d和%d的最小公倍数是%d'%(num1,num2,num1 * num2 // d))
        break


如代码所示,其中for d in range(num1,0,-1)为什么不可以写成(0,num1,1)?
最佳答案
2020-5-12 14:03:44
本帖最后由 sunrise085 于 2020-5-12 14:21 编辑

找的是最大公约数和最小公倍数。
若写成(0,num1,1),那么找到第一个公约数就break跳出了。而第一个公约数不一定是最大公约数
例如:输入:48  60  从下面开始找的话,找到的第一个是1,显然不是最大公约数,但是符合if条件,然后就break跳出循环了

而且不能从0开始,0不能做除数

最佳答案

查看完整内容

找的是最大公约数和最小公倍数。 若写成(0,num1,1),那么找到第一个公约数就break跳出了。而第一个公约数不一定是最大公约数 例如:输入:48 60 从下面开始找的话,找到的第一个是1,显然不是最大公约数,但是符合if条件,然后就break跳出循环了 而且不能从0开始,0不能做除数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-12 14:03:44 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2020-5-12 14:21 编辑

找的是最大公约数和最小公倍数。
若写成(0,num1,1),那么找到第一个公约数就break跳出了。而第一个公约数不一定是最大公约数
例如:输入:48  60  从下面开始找的话,找到的第一个是1,显然不是最大公约数,但是符合if条件,然后就break跳出循环了

而且不能从0开始,0不能做除数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-12 14:10:06 | 显示全部楼层
(0,num1,1)是从0开始递增到num1-1
(num1,0,-1)是从num1开始递减到1
0不能做除数啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-12 14:16:15 | 显示全部楼层
sunrise085 发表于 2020-5-12 14:10
找的是最大公约数和最小公倍数。
若写成(0,num1,1),那么找到第一个公约数就break跳出了。而第一个公约 ...

就是从低到高找到的是公约数,但是不是最大的,所以要从最高到最低?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-12 14:16:33 From FishC Mobile | 显示全部楼层
range(a,b,c)
含左不含右
是从a到b-1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-12 14:20:31 | 显示全部楼层
空条徐伦 发表于 2020-5-12 14:16
就是从低到高找到的是公约数,但是不是最大的,所以要从最高到最低?

对滴!这个程序的if语句找的是公约数,若从小到大,找到的第一个不是最大公约数,只有从大到小,找到的第一个猜数最大公约数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-27 06:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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