C语言----求两个数的最大公约数

求两个数的最大公约数

1.题目:

输入两个数a,b,求两个数的最大公约数。

2.思路:

思路一

以a进行减1,再对a和b分别对a-1求余。如果求余结果都为0,则是最大公约数。如果求余结果都不为0,则继续a-1再减1。不断循环,直到结果求余都为0,则这个数就是两个数的最大公约数。a一定是两个数最大的数。

思路二

辗转相除法,一种数学解法,顾名思义,反复的除,最终得到两数的最大公约数。 首先我们来分析下定理: 定理: 两个整数 的 最大公约数 等于其中 较小 的那个数 和 两数 相除余数 的 最大公约数 。辗转相除法也可求最小公倍数。以a和b都是可以的,无顺序关系。

3.解题代码

思路一

#define _CRT_SECURE_NO_WARNINGS

#include 

int main()
{
	int a = 0;
	int b = 0;
	scanf("%d%d", &a, &b);
	int min = a > b ? b :  a;
	
	while (1)
	{
		if (a % min == 0 && b % min == 0)
		{
			printf("最大公约数是: %d", min);
			break;
		}
		min--;
	}

	return 0;
}

思路二

#define _CRT_SECURE_NO_WARNINGS

#include 

int main()
{
	int a = 0;
	int b = 0;
	int x = 0;
	scanf("%d%d", &a, &b);

	while (x=a%b)
	{
		a = b;
		b = x;
	}
	printf("最大公约数是: %d", x);

	return 0;
}

4.提示

第一点

	int min = a > b ? b :  a;
	int min=0;
	if (a > b)
		min = b;
	else
		min = a;

这两种都是求两个数最大的数。

第二点
方案二中,以a和b都是可以的,无顺序关系。

举一反三

试求两个数的最小公倍数,辗转相除法也可求最小公倍数,比较方便。

你可能感兴趣的:(算法,c++,数据结构)