第1关:不同方法求两数的最小公倍数
时间: 2024-06-04 14:11:03 浏览: 160
方法一:暴力枚举
最小公倍数指的是两个数的公共倍数中最小的一个数,因此可以通过枚举两数的倍数来求得最小公倍数。具体地,从两数中较大的那个数开始,依次枚举它的倍数,直到找到一个同时是另一个数的倍数的数为止,这个数就是最小公倍数。
代码实现:
def lcm(a, b):
if a > b:
greater = a
else:
greater = b
while True:
if greater % a == 0 and greater % b == 0:
lcm = greater
break
greater += 1
return lcm
方法二:质因数分解
最小公倍数也可以通过两数的质因数分解来求得。具体地,将两数分别分解质因数,然后将它们的质因数相乘,但要注意重复的质因数只算一次。
代码实现:
def prime_factors(n):
i = 2
factors = []
while i * i <= n:
if n % i:
i += 1
else:
n //= i
factors.append(i)
if n > 1:
factors.append(n)
return factors
def lcm(a, b):
a_factors = prime_factors(a)
b_factors = prime_factors(b)
all_factors = set(a_factors + b_factors)
lcm = 1
for factor in all_factors:
exponent = max(a_factors.count(factor), b_factors.count(factor))
lcm *= factor ** exponent
return lcm
方法三:辗转相除法
最小公倍数也可以通过两数的辗转相除法来求得。具体地,求出两数的最大公约数,然后用两数的乘积除以最大公约数即可得到最小公倍数。
代码实现:
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)
def lcm(a, b):
return a * b // gcd(a, b)
阅读全文