最大公约数&最小公倍数

最大公约数

最大公约数\((Greatest Common Divisor)\),常缩写为\(GCD\)。一组数的公约数,是指同时同时整除这组数中每一个数的数。最大公约数,是指所有公约数中最大的数。

那么如何求最大公约数呢?我们先考虑两个数的情况。

欧几里得算法

现在我们一张两个数,那么要如何求它们的最大公约数呢?我们不妨设\(a>b\)

  1. \(b\mid a\)时,那么\(b\)就是两者的最大公约数

  2. \(b \nmid a\),即\(a=b\times q+r\),其中\(r<b\)时,我们可以证明得到\(gcd(a,b) = gcd(b,a \: mod\: b)\)

    \(a=b\times k+c\),显然有\(c=a\:mod\:b\)。设,\(d\:|\:a,d\:|\:b\),则有\(c\:|\:d\),因为\(c=a-b\times k,\) 所以\(d\:|(a-b\times k)\),即\(d\:|(a\:mod\:b)\)

    既然\(d\)是它们两个的公约数,所以有\(gcd(a,b) = gcd(b,a \: mod\: b)\)。于是我们也就得到了关于两个数的最大公约数的一个递归求法。时间复杂度为\(O(logN)\)

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

    这个函数也揭示了一个概念,即任何非零整数和零的最大公约数为它本身

    \(gcd(a,b)=1\)时,我们称之为互质。

最小公倍数

最小公倍数(Least Common Multiple),常缩写为\(LCM\)。两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。

我们都知道\(gcd(a,b)\times lcm(a,b)=a\times b\)。所以我们要求两个数的最小公倍数,先求出最大公约数即可。

posted @ 2021-05-16 23:48  h星宇  阅读(607)  评论(0编辑  收藏  举报