空条徐伦 发表于 2020-5-12 14:03:43

求最大公约数和最小公倍数

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)?

sunrise085 发表于 2020-5-12 14:03:44

本帖最后由 sunrise085 于 2020-5-12 14:21 编辑

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

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

Assssura 发表于 2020-5-12 14:10:06

(0,num1,1)是从0开始递增到num1-1
(num1,0,-1)是从num1开始递减到1
0不能做除数啊

空条徐伦 发表于 2020-5-12 14:16:15

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

就是从低到高找到的是公约数,但是不是最大的,所以要从最高到最低?

我都还没出力 发表于 2020-5-12 14:16:33

range(a,b,c)
含左不含右
是从a到b-1

sunrise085 发表于 2020-5-12 14:20:31

空条徐伦 发表于 2020-5-12 14:16
就是从低到高找到的是公约数,但是不是最大的,所以要从最高到最低?

对滴!这个程序的if语句找的是公约数,若从小到大,找到的第一个不是最大公约数,只有从大到小,找到的第一个猜数最大公约数
页: [1]
查看完整版本: 求最大公约数和最小公倍数