while True: try: m,n=map(int,input().split()) if m>n: b=m else: b=n a,c=m,n bei=0 yue=1 for i in range(2,min(m,n)+1): if m%i==0 and n%i==0: yue*=i m/=i n/=i while b>0: if b%a==0 and b%c==0: bei = b break b+=1 print("{} {}".format(yue,bei)) except: break 这段代码哪里有问题
时间: 2023-12-12 14:03:11 浏览: 102
这段代码的问题在于,当输入的数字有小数时,程序会抛出异常,因为无法将小数转换为整数。此外,当输入的数字中有负数时,程序也会出错,因为它没有考虑到负数的情况。
另外,程序的逻辑也有问题。它在求最大公因数和最小公倍数时,没有考虑到某个数已经被除掉了因子的情况,这会导致最后的结果不正确。
以下是修改后的代码:
```python
while True:
try:
m, n = map(int, input().split())
if m < 0:
m = -m
if n < 0:
n = -n
a, c = m, n
if m > n:
b = m
else:
b = n
yue = 1
for i in range(2, min(m, n) + 1):
while m % i == 0 and n % i == 0:
yue *= i
m //= i
n //= i
while b % a != 0 or b % c != 0:
b += 1
bei = b
print("{} {}".format(yue, bei))
except:
break
```
这个版本的代码,先处理了负数的情况,然后在求最大公因数时,使用了 while 循环,将 m 和 n 中的所有公因子都除掉,最后求得最大公因数。在求最小公倍数时,使用了 while 循环,从较大的数开始递增,直到找到能同时被 m 和 n 整除的最小数,即为最小公倍数。
阅读全文