最大公约数(GCD) 与 最小公倍数(LCM)的 定义、关系、求法

最大公约数 与 最小公倍数

  • 约数 和 倍数
      • 最大公约数
      • 最小公倍数
  • 最大公约数与最小公倍数的关系
  • 求最大公约数、最小公倍数
      • 例一
      • 例二

约数 和 倍数

如果数 a a a能被数 b b b整除, a a a就叫做 b b b的倍数, b b b就叫做 a a a的约数。

约数和倍数都表示一个整数与另一个整数的关系,不能单独存在。如:只能说 16 16 16是某数的倍数, 2 2 2是某数的约数,而不能说 16 16 16是倍数, 2 2 2是约数。

最大公约数

最大公约数: G r e a t e s t Greatest Greatest C o m m o n Common Common D i v i s o r Divisor Divisor

几个整数中公有的约数,叫做这几个数的公约数;其中最大的一个,叫做这几个数的最大公约数。例如:

12 、 16 12、16 1216的公约数有 1 、 2 、 4 1、2、4 124,其中最大的一个是 4 4 4 4 4 4 12 12 12 16 16 16的最大公约数,一般记为 ( 12 , 16 ) = 4 (12,16)=4 1216=4

12 、 15 、 18 12、15、18 121518的最大公约数是 3 3 3,记为 ( 12 , 15 , 18 ) = 3 (12,15,18)=3 121518=3

最小公倍数

最小公倍数: L e a s t Least Least C o m m o n Common Common M u l t i p l e r Multipler Multipler

几个自然数公有的倍数,叫做这几个数的公倍数,其中最小的一个自然数,叫做这几个数的最小公倍数。例如:

4 4 4的倍数有 4 、 8 、 12 、 16 4、8、12、16 481216……, 6 6 6的倍数有 6 、 12 、 18 、 24 6、12、18、24 6121824……, 4 4 4 6 6 6的公倍数有 12 、 24 12、24 1224……,其中最小的是 12 12 12,一般记为 [ 4 , 6 ] = 12 [4,6]=12 [46]=12

12 、 15 、 18 12、15、18 121518的最小公倍数是 180 180 180。记为 [ 12 , 15 , 18 ] = 180 [12,15,18]=180 [121518]=180

若干个互质数的最小公倍数为它们的乘积的绝对值。


最大公约数与最小公倍数的关系

经过观察可以发现:

  • 两个数的最大公约数 × 两个数的最小公倍数 = 所有数的积 两个数的最大公约数×两个数的最小公倍数=所有数的积 两个数的最大公约数×两个数的最小公倍数=所有数的积

这是问什么呢?
因为两个数的最小公倍数为它们的所有不重复的质因子的积;
而两个数的最大公约数为它们所以重复的质因子的积;
因此,只有将最小公倍数与GVD相乘,就可以求出所有数的积。
我们也可以的到其它的两条:

  • 所有数的积 ÷ 两个数的最小公倍数 = 两个数的最大公约数 所有数的积÷两个数的最小公倍数=两个数的最大公约数 所有数的积÷两个数的最小公倍数=两个数的最大公约数
  • 所有数的积 ÷ 两个数的最大公约数 = 两个数的最小公倍数 所有数的积÷两个数的最大公约数=两个数的最小公倍数 所有数的积÷两个数的最大公约数=两个数的最小公倍数

求最大公约数、最小公倍数

这里推荐辗转相除法:

辗转相除法是用来求两个正整数最大公约数的算法。古希腊数学家欧几里得在其著作《The Elements》中最早描述了这种算法,所以被命名为欧几里得算法。
扩展欧几里得算法可用于RSA加密等领域。

例一

假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的:
1997 ÷ 615 余 152
615 ÷ 152 余 7
152 ÷ 7 余 5
7 ÷ 5 余 2
5 ÷ 2 余 1
2 ÷ 1 余 0
至此,最大公约数为1

例二

假如需要求 1255 和 840 两个正整数的最大公约数,用欧几里得算法,是这样进行的:
1255 ÷ 840 余 415
840 ÷ 415 余 10
415 ÷ 10 余 5
10 ÷ 5 余 0
至此,最大公约数为5
以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1; 1255 和 840 两个正整数的最大公约数5。

又因为我们知道最大公约数与最小公倍数的关系,因此可以通过这个方法快速求出最小公倍数。

你可能感兴趣的:(C++专栏,算法,数学)