最大公约数和最小公倍数的算法
一般常见的算法有:求差判定法,欧几里得算法,Stein算法。
这边重点介绍欧几里得算法,就是常说的辗转相除法,是经典的求解最大公约数的算法。
辗转相除法求最大公约数:
算法的基本思想是:假设 a > b,则余数 r = a % b,若余数 r 为 0,则 b 即为所求的数;若余数 r不为 0,则互换:置a <— b,b<— r,并返回上一步,直到余数是0,则除数就是最大的公约数。
int maxcomdiv(int num1,int num2)
{
//如果num1小于num2,互换。始终保持num1为大的值
if(num1 < num2)
{
int tmp = num2;
num2 = num1;
num1 = tmp;
}
int r = num1 % num2;
while(r)
{
num1 = num2;
num2 = r;
r = num1 % num2;
}
return num2;
}
最小公倍数的求解:
算法的基本思想是:最小公倍数 * 最大公约数 = 两个数的乘积。
int mincommul(int num1,int num2)
{
return num1 * num2 / maxcomdiv(num1,num2);
}
总结:后续会把剩余的两种求最大公约数的算法补齐