返璞归真——GCD(辗转相除法)
不知为何,最大公约数和最小公倍数总是记不住,今天决定特意写一篇博客,以后自己再忘也有个找资料复习的地方。
最大公约数:也成最大公因数,最大公因子,指两个或者多个整数共有约数中最大的一个。
最小公倍数:两个或多个整数共有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。
对于最小公倍数,数学上,一般用(a,b)来表示a和b的最大公约数,用[a,b]来表示a和b的最小公倍数
有定理:( a,b )* [ a , b ] =a*b;即两数的积与对应最大公约数和最小公倍数的乘积相同。
计算最大公约数一般用:辗转相除法;
对于 a=b*q+r, 有 (a,b)==(b,r),证明不再叙述。
及:a,b的最大公约数,可有(b,(a/b))得到;
辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
a=q*b+r; 都为整数 gcd(a,b)=gcd(b,r);
gcd(a,b)=gcd(b, a mod b );
代码如下:
long long gcd(long long a,long long b) { return b==0?a:gcd(b,a%b); }
当计算出最大公约数后,最小公倍数可有成绩相等这一定理得到。
以上