方法名称 | 原理 | 步骤详解 | 代码示例 |
---|---|---|---|
辗转相除法 | 基于最大公约数(GCD) | 1. 求出两个数的最大公约数; 2. 两个数的乘积等于它们的最大公约数和最小公倍数的乘积; 3. 最小公倍数 两数乘积 / 最大公约数。 |
```python |
def gcd(a, b):
while b:
a, b b, a % b
return a
def lcm(a, b):
return a b // gcd(a, b)
示例
num1 12
num2 18
print(lcm(num1, num2))
``` |
| 更相减损术 | 通过连续减去较小数直到两数相等,得到最大公约数 | 1. 较大的数减去较小的数;
2. 将较小的数与上一步的差值进行比较;
3. 重复步骤1和2,直到两数相等;
4. 最小公倍数 两数乘积 / 最大公约数。 | ```python
def gcdbysubtraction(a, b):
while a ! b:
if a > b:
a a - b
else:
b b - a
return a
def lcmbysubtraction(a, b):
return a b // gcdbysubtraction(a, b)
示例
num1 12
num2 18
print(lcmbysubtraction(num1, num2))
``` |
| 暴力法 | 逐个尝试,找到第一个能被两个数整除的数 | 1. 从两个数中较大的数开始;
2. 逐个增加,检查当前数是否能被两个数整除;
3. 如果能整除,则为最小公倍数;
4. 如果不能整除,继续增加。 | ```python
def lcmbybrute_force(a, b):
for num in range(max(a, b), a b + 1, a + b):
if num % a 0 and num % b 0:
return num
示例
num1 12
num2 18
print(lcmbybrute_force(num1, num2))
``` |
| 质因数分解法 | 将两个数分解为质因数,然后取每个质因数的最高次幂相乘 | 1. 对两个数分别进行质因数分解;
2. 对每个质因数,取两个数中出现的最高次幂;
3. 将所有质因数的最高次幂相乘,得到最小公倍数。 | ```python
from math import gcd
def prime_factors(n):
factors {}
divisor 2
while n > divisor:
while n % divisor 0:
factors[divisor] factors.get(divisor, 0) + 1
n // divisor
divisor + 1
return factors
def lcmbyprime_factors(a, b):
afactors primefactors(a)
bfactors primefactors(b)
lcm_factors {}
for factor in set(afactors.keys()).union(set(bfactors.keys())):
lcmfactors[factor] max(afactors.get(factor, 0), b_factors.get(factor, 0))
return int(reduce(lambda x, y: x y, [fexp for f, exp in lcm_factors.items()]))
示例
num1 12
num2 18
print(lcmbyprime_factors(num1, num2))
``` |