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

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

国际空间研究组织 | ISRO CS 2015 |问题 15

问题描述

计算两个数的最大公约数和最小公倍数。

输入格式

共两行,每行一个正整数。

输出格式

输出两个数,第一个数为最大公约数,第二个数为最小公倍数。

样例输入
6
9
样例输出
3
18
解题思路

先计算最大公约数,再用两个数相乘除以最大公约数得到最小公倍数。

具体计算最大公约数的方法可以用辗转相除法或辗转相减法,两种方法本质上是一样的,只不过运算的方式不同而已。

代码实现

以下是用辗转相除法计算最大公约数的python实现:

a = int(input())
b = int(input())

while b:
    a, b = b, a % b

gcd = a
lcm = (a * b) // gcd

print(gcd, lcm)

以下是用辗转相减法计算最大公约数的python实现:

a = int(input())
b = int(input())

while a != b:
    if a > b:
        a -= b
    else:
        b -= a

gcd = a
lcm = (a * b) // gcd

print(gcd, lcm)

注意,以上实现中最小公倍数的计算方法是 (a * b) // gcd,而不是 a * b。因为如果直接相乘再除以最大公约数,容易溢出,而 (a * b) // gcd 不会溢出。