最小公倍数Python——三种方法

本文介绍了如何使用辗转相除法(欧几里德法)和相减法求解两个正整数的最大公约数,并提供了相应的Python代码示例。通过这两个方法计算最小公倍数,展示了编程解决数学问题的实践应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最小公倍数 = 两数的乘积 / 最大公约数

辗转相除法(欧几里德法)

这种方法的实现原理是求两个正整数的余数 r,再用两个正整数中的较小数与其再求余直到余数为 0 时,此时的较小数就是最大公约数。最后利用公式计算得到这两个数的最小公倍数。

代码示例:

print("请输入两个正整数:")
m = int(input())
n = int(input())
x = m * n  # x用于存放m与n的乘积
print(f"{m}和{n}的最小公倍数是:", end='')  # 此时输出m和n的值还没改变
r = m % n
while r != 0:  # 不用比较大小,若m小于n,则会在第一遍循环交换位置
    m = n
    n = r
    r = m % n
print(x // n)

相减法(更相减损法)

这种方法比较易于理解,原理是先判断两个正整数大小,并将较大数与较小数的差值赋给较大数,循环此步骤直到两数相等,此时得出最大公约数。最后利用公式计算得到这两个数的最小公倍数。

代码示例:

print("请输入两个正整数:")
m = int(input())
n = int(input())
x = m * n  # x用于存放m与n的乘积
print(f"{m}和{n}的最小公倍数是:", end='')  # 此时输出m和n的值还没改变
while m != n:
    if m > n:
        m = m - n
    else:
        n = n - m
print(x // m)

### Python实现最小公倍数的计算 在Python中,可以通过多种方式来实现最小公倍数(Least Common Multiple, LCM)的计算。以下是几种常见的方法: #### 方法一:利用最大公约数(GCD) 根据数学原理,两个正整数 \(a\) 和 \(b\) 的最小公倍数可以表示为它们的乘积除以它们的最大公约数[^2]。即: \[ \text{LCM}(a, b) = \frac{|a \times b|}{\text{GCD}(a, b)} \] 通过 `math` 模块中的 `gcd` 函数可以直接获取两数的最大公约数,从而简化最小公倍数的计算过程。 ```python import math def lcm(a, b): return abs(a * b) // math.gcd(a, b) # 测试代码 print(lcm(12, 18)) # 输出: 36 ``` 此方法的优点在于其简洁性和高效率,适合处理较大的数值范围[^4]。 --- #### 方法二:枚举法 另一种常见的方式是通过逐步增加较大值直到找到能被较小值整除的结果为止。这种方法虽然直观但可能不够高效,尤其当涉及非常大的数字时性能会下降。 ```python def lcm_by_enumeration(a, b): larger = max(a, b) while True: if (larger % a == 0) and (larger % b == 0): return larger larger += 1 # 测试代码 print(lcm_by_enumeration(12, 18)) # 输出: 36 ``` 尽管如此,在某些特定场景下它仍然具有一定的适用价值。 --- #### 方法三:基于质因数分解 理论上讲,任何自然数都可以唯一地写成若干素因子幂次形式之积;因此如果知道某组数据各自的全部质因素及其对应指数,则很容易得出这些数之间相互关系——包括但不限于求取lcm操作。不过实际编码过程中往往更倾向于采用前两种更为简便直接的技术路线而非深入探讨底层细节层面的东西[^3]。 综上所述,推荐优先考虑调用标准库功能完成此类任务以便于维护并提高运行速度的同时减少错误发生几率。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值