C语言--求最大公约数及最小公倍数

欧几里得法(最大公约数):

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int max = 0;
	printf("请输入两组数字:");
	scanf_s("%d %d", &a, &b);
	while (max = a%b)
	{
		a = b;
		b = max;
	}
	printf("最大公约数为:%d\n", b);
	return 0;
}

求最大公约数的经典算法是Euclid(欧几里得)算法,方法如下:分别让变量a和b储存两个数的值,计算a除以b的余数,把b保存到a中,并把余数保存到b中,重复上述过程,直到余数为零。b中的值是最大公约数。 

PS:不需要去判断a和b中的最大值,无论是a大还是b大,输出的结果依然不变。

穷举法(最大公约数):

#include<stdio.h>
int main()
{
	int n = 0;
	int m = 0;
	int max = 0;
	printf("请输入两组数字:");
	scanf_s("%d %d", &n, &m);
	if (n > m)
	{
		max = n;
	}
	else
	{
		max = m;
	}
	while (1)
	{
		if(n % max == 0 && m % max == 0)
			{
				printf("最大公约数为:%d\n", max);
				break;
			}
		max--;
	}

穷举法应该是最容易想到的方法,原理也很简单。找出两个数之间的最大值,存在变量max中。让两个数分别和这个max取余数,每次循环max减一,直到第一次相等为止,则max就是要找的最大公约数。

最小公倍数

最小公倍数有两种做法,第一种是公式法,最小公倍数 = 第一个数 * 第二个数 / 最小公约数

第二个方法是穷举法,在求最大公约数的代码上稍作修改,原来的代码是一次次循环相减,现在改成不断去相加做判断,最后得出结果。

#include<stdio.h>
int main()
{
	int n = 0;
	int m = 0;
	int max = 0;
	printf("请输入两组数字:");
	scanf_s("%d %d", &n, &m);
	if (n > m)
	{
		max = n;
	}
	else
	{
		max = m;
	}
	while (1)
	{
		if(max % n == 0 && max % m ==0 )
			{
				printf("最小公倍数为:%d\n", max);
				break;
			}
		max++;
	}
}

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值