怎么编程求最小公倍数的方法

wzgly
方法名称 原理 步骤详解 代码示例
辗转相除法 基于最大公约数(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))

``` |

文章版权声明:除非注明,否则均为简致常识网原创文章,转载或复制请以超链接形式并注明出处。