题目

从标准输入读入两个正整数 a 和 b,计算并输出它们的最小公倍数(LCM)。

输入格式:一行输入两个正整数 a 和 b,以空格分隔。

输出格式:输出一个整数,表示 a 和 b 的最小公倍数,末尾换行。

数据范围与约定:1 ≤ a, b ≤ 109。

思路与算法

1. 数学推导与公式
两数乘积等于最大公约数与最小公倍数的乘积:a * b = gcd(a, b) * lcm(a, b),故 lcm(a, b) = a * b // gcd(a, b)。

2. 先除后乘规范
先整除最大公约数再乘以另一数 (a // g) * b,可以有效缩小中间计算值。

完整程序

a, b = map(int, input().split())

# 先通过欧几里得算法求出最大公约数
x, y = a, b
while y != 0:
    x, y = y, x % y
gcd_val = x

# 关键技巧:先整除 gcd 再乘 b,防止中间乘积过大
lcm = (a // gcd_val) * b
print(lcm)

运行示例

输入:

4 6

输出:

12