📌  相关文章
📜  国际空间研究组织 | ISRO CS 2016 |问题 44(1)

📅  最后修改于: 2023-12-03 15:23:04.027000             🧑  作者: Mango

国际空间研究组织(ISRO)CS 2016 - 问题 44

本题要求编写一个程序,计算两个正整数的最小公倍数。

输入格式

输入包含多组测试数据,每行包含两个正整数 $a$ 和 $b$,$1 \leq a, b \leq 10^9$,以空格分隔。

输出格式

对于每组数据,输出它们的最小公倍数。

样例输入
2 3
4 6
样例输出
6
12
解题思路

两个正整数的最小公倍数可以通过它们的乘积除以它们的最大公约数来计算得出。因此,我们可以通过首先计算它们的最大公约数,然后计算它们的乘积除以最大公约数来得到它们的最小公倍数。

在本题中,我们可以使用辗转相除法(又称欧几里得算法)来计算两个数的最大公约数。该算法的具体步骤如下:

  1. 如果 $b = 0$,则最大公约数为 $a$。
  2. 否则,计算 $a$ 除以 $b$ 的余数 $r$。将 $a$ 赋值为 $b$,将 $b$ 赋值为 $r$。
  3. 重复步骤 1 和步骤 2,直到 $r = 0$,此时最大公约数为 $b$。
参考代码
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
代码说明
  1. 首先定义了一个 gcd 函数,它采用了辗转相除法来计算两个数的最大公约数。
  2. 使用一个死循环,并且捕获 EOFError 异常,以便我们可以处理多组输入数据。
  3. 对于每组输入数据,我们从标准输入中读取两个整数 ab。然后通过 gcd 函数计算它们的最大公约数 g。最小公倍数 l 可以通过 $l = a \times b / g$ 计算得出。
  4. 将最小公倍数输出到标准输出中。