给定两个数,用C语言求这两个数的最大公约数

方法一(试除法):

/*
* 试除法
* 求两个数的最大公约数,最大公约数不会超过这两个数中较小的那个值
* 所以先判断这两个数哪个较小,再用这两个数除以较小的数,依次递减
*/
#include
int main()
{
	int m = 0;
	int n = 0;
	scanf("%d %d", &m, &n);
	int min = m < n ? m : n;
	while (1)
	{
		if ((m % min == 0) && (n % min == 0))
		{
			printf("%d\n", min);
			break;
		}
		min--;
	}
	return 0;
}

方法二(辗转相除法):

涉及到一些数学知识,大家有兴趣可以去了解一下

// 辗转相除法
#include
int main()
{
	int m = 0;
	int n = 0;
	int r = 0;
	scanf("%d %d", &m, &n);
	while (r = m % n)
	{
		m = n;
		n = r;
	}
	printf("%d\n", n);
	return 0;
}

同理,可以求
给定两个数,求这两个数的所有公约数

#include
int main()
{
	int m = 0;
	int n = 0;
	scanf("%d %d", &m, &n);
	int min = m < n ? m : n;
	while (min)
	{
		if ((m % min == 0) && (n % min == 0))
		{
			printf("%d\n",min);
		}
		min--;
	}
	return 0;
}

也可以求最小公倍数:

/*
* m和n的最大公约数是k
* 最小公倍数:
* m*n/k
*/

你可能感兴趣的:(算法,c语言,开发语言)