📜  两个大数的LCM(1)

📅  最后修改于: 2023-12-03 15:06:14.199000             🧑  作者: Mango

两个大数的LCM介绍

什么是LCM

LCM 是 Least Common Multiple 的缩写,即求两个或多个数的最小公倍数(Least Common Multiple)。其中,最小公倍数指在一组数中公共的倍数中,最小的一个数。

求解两个大数的LCM

在计算机科学中,求两个大数的LCM,可以采用较为简单的算法,即先分解质因数,再通过比较每个质因数的指数,取最大的值来计算LCM。

以下是一个求解两个大数的LCM的Python程序片段:

def lcm(a, b):
    # 快速分解质因数算法
    def prime_factorization(n):
        factors = []
        for i in range(2, int(n**0.5)+1):
            while(n%i==0):
                factors.append(i)
                n /= i
        if n > 1:
            factors.append(int(n))
        return factors

    factors_a = prime_factorization(a)
    factors_b = prime_factorization(b)
    factors = list(set(factors_a) | set(factors_b))

    lcm = 1
    for i in factors:
        lcm *= i ** max(factors_a.count(i), factors_b.count(i))

    return lcm
程序说明

首先,定义了一个 lcm() 函数,用于计算两个数的最小公倍数。在 lcm() 函数中,使用了一个快速分解质因数的算法 prime_factorization(),用于分解出每个数的质因数。其中,算法步骤如下:

  1. 定义一个数组 factors,用于存储分解出来的每个质因数。
  2. 从 2 开始,循环到根号下 n,每次判断是否可以将 n 整除,如果可以,将该质因数添加到 factors 数组中,同时将 n 除以该质因数。重复此步骤,直到无法整除为止。
  3. 判断最后的 n 是否大于 1,若大于 1,则说明这个数也是质因数,需要将其添加到 factors 数组中。
  4. 返回 factors 数组。

接下来,将两个数 ab 分别传入 prime_factorization() 方法中,得到其分解出来的质因数,并将两个质因数数组取并集,得到 factors 数组。

最后,循环 factors 数组,将每个质因数的指数取两个质因数数组中该质因数的最大值,并相乘得到最小公倍数。

总结

求解两个大数的LCM,可以采用先分解质因数,再取最大值相乘的方式进行,该算法复杂度为 O(logn),能够快速得到较大数的最小公倍数。