题目
从标准输入读入两个正整数 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