📅  最后修改于: 2023-12-03 15:23:04.027000             🧑  作者: Mango
本题要求编写一个程序,计算两个正整数的最小公倍数。
输入包含多组测试数据,每行包含两个正整数 $a$ 和 $b$,$1 \leq a, b \leq 10^9$,以空格分隔。
对于每组数据,输出它们的最小公倍数。
2 3
4 6
6
12
两个正整数的最小公倍数可以通过它们的乘积除以它们的最大公约数来计算得出。因此,我们可以通过首先计算它们的最大公约数,然后计算它们的乘积除以最大公约数来得到它们的最小公倍数。
在本题中,我们可以使用辗转相除法(又称欧几里得算法)来计算两个数的最大公约数。该算法的具体步骤如下:
def gcd(a, b):
"""计算 a 和 b 的最大公约数。"""
while b > 0:
a, b = b, a % b
return a
while True:
try:
a, b = map(int, input().split())
lcm = a * b // gcd(a, b)
print(lcm)
except EOFError:
break
gcd
函数,它采用了辗转相除法来计算两个数的最大公约数。EOFError
异常,以便我们可以处理多组输入数据。a
和 b
。然后通过 gcd
函数计算它们的最大公约数 g
。最小公倍数 l
可以通过 $l = a \times b / g$ 计算得出。