GCD和LCM学习指南

典题合集

前置芝士

约数

约数,又称因数。整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。

倍数

一个整数能够被另一个整数整除,这个整数就是另一整数的倍数。

最小公倍数和最大公约数的联系

\(a=p_{1}^{ka_{1}}p_{2}^{ka_{2}}\cdots p_{s}^{ka_{8}},b=p_{1}^{kb_{1}}p_{2}^{kb_{2}}\cdots p_{s}^{kb_{8}}\)

则对于a和b的情况,二者的最大公约数等于\(p_1^{\min(k_{a_1},kb_1)}p_2^{\min(k_{a_2},kb_2)}\cdots p_s^{\min(k_{a_s},kb_s)}\)

最小公倍数等于\(p_1^{\max(k_{a_1},k_{b_1})}p_2^{\max(k_{a_2},k_{b_2})}\cdots p_s^{\max(k_{a_s},k_{b_s})}\)

由于\(k_a+k_b=\max(k_a,k_b)+\min(k_a,k_b)\),所以可以得到结论:\(\gcd(a,b)\times\operatorname{lcm}(a,b)=a\times b\),即lcm(a,b)=a / gcd(a,b) * b。

要求两个数的最小公倍数,可以先求最大公约数。

求两数最大公约数

欧几里得算法

int gcd(int a, int b)
{
    return b ? gcd(b, a % b) : a;
}

朴素辗转相减法

def gcd(a, b):
    while b != 0:
        if a > b:
            a = a - b
        else:
            b = b - a
    return a
posted @ 2023-12-04 17:06  White_Sheep  阅读(12)  评论(0编辑  收藏  举报