#P2089. 通过分解质因数求若干个数的最小公倍数.理论知识

通过分解质因数求若干个数的最小公倍数.理论知识

1. 求最小公倍数的常规方法回顾

  1. 暴力枚举法
long long work(long long a,long long b)
{
    for(long long i=max(a,b);;i++)
        if(i%a==0&&i%b==0)
            return i;
}
  1. 大数翻倍法
long long work(long long a,long long b)
{
    if(a<b) swap(a,b);
    for(long long i=a;;i+=a) // i 是 a 的倍数,每次增加一倍,i 必然是 a 的倍数,我们只要保证 i 也是 b 的倍数,那么 i 就一定是 a,b 的最小公倍数
        if(i%b==0)
            return i;
}
  1. 公式法
long long work(long long a,long long b)
{
    long long c = __gcd(a,b); // 先求 a,b 的最大公约数
    return a*b/c; //按照公式算出最小公倍数
}

2. 分解质因数求若干个数的最小公倍数

有 n 个数 aia_i (i 从 1 到 n),求它们的最小公倍数可以采用下面方法:

  1. 求出 max(aia_i),算出 小于等于 max(aia_i) 的所有质数 bjb_j

  2. 对每一个 aia_i 进行质因数分解,进而得到 ci,jc_{i,j}, 其含义为对 aia_i 分解质因数,能分解出 ci,jc_{i,j} 个质因数 bjb_j

下面,我们举一个例子,假设我们要求 2 到 15 的最小公倍数。 img

  • 2,4,6,8,10,12,14 都能分解出质因数 2 ,最多能分解出 3 个(8 分解出 3 个 2),所以,最少公倍数一定包含 3 个质因数 2 (不可能小于 3 个,否则就不可能是 8 的倍数;也不可能多于 3 个,否则就不是最小的倍数)

  • 3,6,9,12,15 都能分解出质因数 3,最多能分解出 2 个 3(9 分解出 2 个 3),所以,最少公倍数一定包含 2 个质因数 3

  • 5,10,15 都能分解出质因数 5,均只能分解出 1 个 5,所以,最少公倍数一定包含 1 个质因数 5

.....

3. 通过分解质因数的方法求最小公倍数的应用场景

有一些题目并不需要真正输出最小公倍数的具体数值是什么。只需要根据这个分解情况进行下一步计算,分解法在这个时候特别有意义。

公式法中出现除的运算。意味着,中间答案可能会很大,容易溢出。另外,因为有除法的出现,就导致了同余定理不能使用。用分解法来求质因数,最终结果就是对很多很多个质因数乘起来,乘法和加法都是可以运用同余定理的。