给定两个正整数m和n,编写算法求它们的最小公倍数,输出结果在n中。
时间: 2024-09-22 16:02:41 浏览: 50
求两个正整数 m 和 n 的最小公倍数(LCM,Least Common Multiple)的一种常见算法是通过欧几里得算法(Euclidean Algorithm)结合质因数分解。这里提供一个简单的步骤:
1. **质因数分解**:首先将 m 和 n 分解成质因数的乘积形式,如 \(m = p_1^{a_1} \times p_2^{a_2} \times ...\) 和 \(n = q_1^{b_1} \times q_2^{b_2} \times ...\),其中 \(p_i\) 和 \(q_j\) 是质数,\(a_i\) 和 \(b_j\) 是对应的指数。
2. **取最大指数**:对于每一个公共质因数,选择指数最大的那一个,例如 \(max(a_1, b_1)\) 对应于 \(p_1\),\(max(a_2, b_2)\) 对 \(p_2\),以此类推。
3. **计算结果**:然后将这些质因数分别提升到最大指数次方,得到两者的最小公倍数 \(LCM(m, n) = p_1^{max(a_1, b_1)} \times p_2^{max(a_2, b_2)} \times ...\)
4. **模运算优化**:如果 \(m\) 和 \(n\) 都小于 \(n\),则不需要对 \(n\) 执行质因数分解,因为最小公倍数肯定不会超过 \(n\)。可以利用模运算快速确定 \(LCM\),即 \(LCM = (m * n) / gcd(m, n)\) 其中 \(gcd\) 表示最大公约数。
下面是一个伪代码的例子:
```python
def lcm(m, n):
# 计算最大公约数
def gcd(x, y):
while y != 0:
x, y = y, x % y
return x
result = m
while m % n != 0:
temp = m
m = n
n = temp % n
return result
# 如果m >= n,可以直接计算
if m < n:
result = (m * n) // gcd(m, n)
else:
result = m
return result
```
阅读全文