辗转相除法求最大公约数

给定两个整数 a,b的值,r表示取模后余下的数。若a%b==0,则直接输出b为最大公约数;若a%b!=0,则进入循环,一直取模求余,直到a%b==0为止。

例如:a = 24,b = 32;

r = a%b =24;(r!=0进入循环)

a = 32, b = 24;

r = a%b = 8 ;(r!=0进入循环)

a = 24,b = 8;

r = a%b =0;(r==0跳出循环)

输出最大公约数:8

代码如下:

#include <stdio.h>
int main()
{
	int a = 24;
	int b = 32;
	int r = 0;
	while ((r = a%b) != 0)
	{
		a = b;
		b = r;
	}
	printf("最大公约数为:%d\n", b);
	return 0;
}

补充:最小公倍数*最大公约数=两个数之积

因此可通过上式求解最小公倍数。

代码如下:

#include <stdio.h>
int main()
{
	int a = 24;
	int b = 32;
	int tmp = a*b;
	int r = 0;
	while ((r = a%b) != 0)
	{
		a = b;
		b = r;
	}
	printf("最大公约数为:%d\n", b);
	printf("最小公倍数为:%d\n",tmp/b );

	return 0;
}

猜你喜欢

转载自blog.csdn.net/Lsxlsxls/article/details/80169798
今日推荐