求最大公约数和最小公倍数
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:21 编辑
找的是最大公约数和最小公倍数。
若写成(0,num1,1),那么找到第一个公约数就break跳出了。而第一个公约数不一定是最大公约数
例如:输入:4860从下面开始找的话,找到的第一个是1,显然不是最大公约数,但是符合if条件,然后就break跳出循环了
而且不能从0开始,0不能做除数
(0,num1,1)是从0开始递增到num1-1
(num1,0,-1)是从num1开始递减到1
0不能做除数啊 sunrise085 发表于 2020-5-12 14:10
找的是最大公约数和最小公倍数。
若写成(0,num1,1),那么找到第一个公约数就break跳出了。而第一个公约 ...
就是从低到高找到的是公约数,但是不是最大的,所以要从最高到最低?
range(a,b,c)
含左不含右
是从a到b-1 空条徐伦 发表于 2020-5-12 14:16
就是从低到高找到的是公约数,但是不是最大的,所以要从最高到最低?
对滴!这个程序的if语句找的是公约数,若从小到大,找到的第一个不是最大公约数,只有从大到小,找到的第一个猜数最大公约数
页:
[1]