"""练习 14:用欧几里得算法求两个正整数的最大公约数和最小公倍数。 学习说明: - 辗转相除法利用性质:gcd(a, b) = gcd(b, a % b)。 - 循环每次把 (a, b) 更新为 (b, 余数);余数最终变成 0,此时 a 就是最大公约数。 - 先保存原始输入,因为循环会改变 a、b。 - 最小公倍数可用 a*b//gcd;先除再乘可减小中间结果。 """ a, b = map(int, input().split()) if a <= 0 or b <= 0: raise ValueError("请输入两个正整数") original_a, original_b = a, b # 每轮用余数替换较大的问题,直到余数为零。 while b != 0: a, b = b, a % b gcd = a lcm = original_a // gcd * original_b print("gcd:", gcd) print("lcm:", lcm)