两数的最大公约数和最小公倍数
一、最大公约数
1、补充概念
明确两数最大公约数之前,先补充几个概念。
(1)两数互质的概念:
两数互质即表示数除1之外没有任何公约数,1与其他任何数互质
(2)互质的性质:a,b互质 《充要条件》 (a-b),b互质
证明:
(I)从左到右:反证,假设a,b互质,且(a-b),b不互质
不妨令(a-b)=cd1, b=cd2,(c不为1,以下假设都如此)
则有a=c*(d1+d2),而b=c*d2,即a,b有公约数c
(II)从右到左,证明类似,不做赘述
(3)最大公约数表示方法
a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c)
(4)什么是最大公约数
12、16的公约数有1、2、4,显然(12,16)=4,可以发现 12/4 和16/4 两数互质
因此归纳并证明如下结论:
(a,b)=m,则有a/m与b/m互质,即a,b最大公约数是m,一定有a/m与b/m互质
证明:(a,b)=m 《充要条件》 m是 a,b公约数之一,且是公约数中最大的
反证:假设(a,b)=m,且a/m和b/m不互质
不妨令 a/m=cd1, b/m=cd2, 即,a/m和b/m有公约数c(因为二者不互质)
则有 a/(mc)=d1, b/(mc)=d2, 即a,b有更大的公约数m*c,矛盾,假设不成立
因此,可以有如下定理:
(a,b)=m,则有a/m与b/m互质,即a,b最大公约数是m,一定有a/m与b/m互质
显然,可证:(a,b)=m 《充要条件》 m是 a,b公约数之一,且a/m与b/m互质
2、辗转相除法原理
先看一个实例,假设12,16的最大公约数为m,那么m是12和16的公约数,且12/m与16/m互质,
不妨设12/m=d1, 16/m=d2, (d1与d2互质)
则(16-12)/m=4/m=d2-d1,即m是4和12的公约数
又12/m与16/m互质,
则16/m-12/m与12/m互质,即4/m与12/m互质
因此,m是4和12的最大公约数
继续归纳:12,12+4最大公约数是m,则12和4最大公约数也是m。
同理,15和15+15+4最大公约数为m1,则15和15+4最大公约数为m1,则15和4最大公约数为m1。
同理,18和18*n+4最大公约数为m2,则可推得18和4最大公约数为m2
归纳为一般情况,若a,b最大公约数为m,a/b=c…d, 则b和d最大公约数为m
至此,辗转相除法求最大公约数的原理讲解完毕。
3、辗转相除法求最大公约数
比如:求96和50的最大公约数
96/50=1…46,等同于求50和46最大公约数
50/46=1…4,等同于求46和4的最大公约数
46/4=11…2,等同于求4和2的最大公约数
4/2=2…0,求得最大公约数为2
4、最小公倍数
(1)最小公倍数表示方法,[a,b]表示a与b的最小公倍数
(2)[a,b]=a*b/(a,b)
证明:
假设(a,b)=m,a=md1, b=md2, 且d1与d2互质
显然,可知最小公倍数[a,b]=md1d2,
显然符合上述公式,证毕
//GCD(greatest common divisor - 最大公约数)
int gcd(const int& num1, const int& num2) //辗转相除法
{
int n1 = num1;
int n2 = num2;
while ((n1%n2)!= 0)
{
int temp = n1 % n2;
n1 = n2;
n2 = temp;
}
return n2;
}
//LCM(least common multiple - 最小公倍数)
int lcm(const int& num1, const int& num2)
{
return num1 / gcd(num1, num2) * num2;
}