求两个数的最大公约数和最小公倍数

方法1:暴力求解

最大公约数:

是比这两个数小于等于的数,那么先假设最大公约数是这两个数中较小的, 然后用两个数对假设的这个最大公约数去求余,没有余数则假设的数就是最大公约数;有余数则对假设的这个数去减1,再去求余,直到没有余数为止,那么那个数就是最大公约数

最小公倍数:

是比这两个数大于等于的数,那么先假设是最小公倍数这两个数中较大的, 然后用假设的数对两个数去求余,没有余数则假设的数就是最小公倍数;有余数则对假设的这个数去加1,再去求余,直到没有余数为止,那么那个数就是最小公倍数

代码如下:

//最大公约数

#include
int main()
{
	int a = 0, b = 0;
	scanf("%d %d", &a, &b);
	int min = (a < b) ? a : b;
	while(1)
	{
		if (a % min == 0 && b % min == 0)
		{
			printf("%d", min);
			break;
		}
		else
		{
			min--;
		}
	}
	return 0;
}
//最小公倍数

#include
int main()
{
	int a = 0, b = 0;
	scanf("%d %d", &a, &b);
	int max = (a > b) ? a : b;
	while(1)
	{
		if (max % a == 0 && max % b == 0)
		{
			printf("%d", max);
			break;
		}
		else
		{
			max++;
		}
	}
	return 0;
}

方法2:效率更高的辗转相除法(这里只是简单介绍一下)

最大公约数:

用两个数中的个对一个求余,没有余数,则最大公约数就是除数;有余数则将除数的值赋给被除数,余数的值赋给除数,继续求余,以此类推,直到没有余数,那么除数就是最大公约数。

最小公倍数:

两个数的乘积除以最大公约数就是最小公倍数

图片解释

求两个数的最大公约数和最小公倍数_第1张图片

代码如下:

#include
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	scanf("%d %d", &a, &b);
    int m = a*b;

	while (c = a % b)
	{
		a = b;
		b = c;
	}

	printf("最大公因数:%d\n", b);
 
   printf("最小公倍数:%d\n", m/b);

	return 0;
}

再来介绍一下新学习的求最小公倍数的方法,个人认为简单且代码效率高

两个数a  b 的最小公倍数m一定满足m=a*i=b*j;这样只要找到a*i%b==0或b*j%a==0的这个数,这个数就是最小公倍数

代码如下:

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

	int i = 1;
	while (1)
	{
		if (a * i % b == 0)
		{
			break;
		}
		else
		{
			i++;
		}
	}

	printf("%d\n", a * i);

	return 0;
}

 

你可能感兴趣的:(c语言)