python 求最小公倍数和最大公约数(辗转相除法)
时间: 2025-03-19 10:09:37 浏览: 57
### 使用 Python 实现辗转相除法计算最小公倍数和最大公约数
#### 一、基本原理
辗转相除法是一种用于求解两个正整数的最大公约数的有效方法。该算法的核心思想在于不断用较大数对较小数取模,直到余数为零为止,此时的较小数即为两者的最大公约数[^5]。
对于任意两个正整数 \(a\) 和 \(b\) 的最小公倍数(LCM),可以通过以下公式计算得出:
\[
\text{LCM}(a, b) = \frac{|a \times b|}{\text{GCD}(a, b)}
\]
其中 GCD 表示最大公约数。
---
#### 二、代码实现
以下是基于上述理论编写的 Python 示例代码:
```python
def gcd(a, b):
"""使用辗转相除法求最大公约数"""
while b != 0:
a, b = b, a % b
return a
def lcm(a, b):
"""根据最大公约数计算最小公倍数"""
return abs(a * b) // gcd(a, b)
# 测试函数
if __name__ == "__main__":
num1 = int(input("请输入第一个正整数: "))
num2 = int(input("请输入第二个正整数: "))
greatest_common_divisor = gcd(num1, num2)
least_common_multiple = lcm(num1, num2)
print(f"{num1} 和 {num2} 的最大公约数是: {greatest_common_divisor}")
print(f"{num1} 和 {num2} 的最小公倍数是: {least_common_multiple}")
```
此代码实现了两种功能:一是通过循环方式应用辗转相除法求得最大公约数;二是依据两者关系进一步推导出最小公倍数[^2]。
如果需要扩展到三个或更多数字的情况,则需依次调用这些基础操作完成整体运算过程[^4]。
---
#### 三、递归版本实现
除了迭代形式外,还可以采用递归来简化逻辑表达:
```python
def recursive_gcd(a, b):
"""递归版辗转相除法求最大公约数"""
if b == 0:
return a
else:
return recursive_gcd(b, a % b)
def recursive_lcm(a, b):
"""递归配合最大公约数求最小公倍数"""
return abs(a * b) // recursive_gcd(a, b)
# 测试递归函数
print(recursive_gcd(12, 21), recursive_lcm(12, 21))
```
这种方法同样能够高效解决问题,并且更加直观地体现了数学定义上的终止条件与逐步缩小规模的过程[^3]。
---
### 四、注意事项
当处理多个数值时,应先分别成对计算每组间的 LCM 或者 GCD 值再继续向前推进直至覆盖全部参与项[^1]。
---
阅读全文
相关推荐




















