对于如何求解两个正整数的最大公约数和最小公倍数,在小学我们就接触了短除法,不过这种方法不易于转变为普适的算法。直到高中时,数学课本中有了算法的章节,其中就有了两个经典的算法——“辗转相除法”和“更相减损术”(如果忘记了,请自己百度下,也可以通过下面的例子总结规律。)——这两个是不错的求解最大公约数的方法,而且易于用计算机语言实现!(这是我在大学接触编程后才发现的。)
下面为6和10求最大公约数2的过程:
辗转相除法:
10 = 1 * 6 + 4;
6 = 1 * 4 + 2;
4 = 2 * 2 + 0;
2为6和10的最大公约数。 更相减损术: 10 – 6 = 4;
6 – 4 = 2;
4 – 2 = 2;
2为6和10的最大公约数。
只要求解出了最大公约数,求解最小公倍数将变得十分简单,可以使用一下公式:
MAX_yue * MIN_bei = A * B;
其中,A、B为两个正整数,MAX_yue为A和B的最大公约数,MIN_bei为A和B的最小公倍数。
下面将是用C语言实现“求解两个正整数(这里限定为:至少有一个数为合数。原因很简单,如果两个值都为素数,那么这两个值一定互为素数,如果使用下面的算法计算,效率会比较低。当然,可以先判断这两个数是否为素数,如果都为素数就不再计算,直接输出结果!)的最大公约数和最小公倍数”算法的源码,仅供参考!
//求两个正整数的最大公约