求最大公约数,最小公倍数算法

最大公约数和最小公倍数的算法

一般常见的算法有:求差判定法,欧几里得算法,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);
}

总结:后续会把剩余的两种求最大公约数的算法补齐

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章