最大公约数和最小公倍数

求最大公约数和最小公倍数是C语言算法中最基本的案例。一下列出三种方法来帮助你学习:

a) 第一种方法:

#include<stdio.h>
int main()
{
	int a, b,m, n;
	printf("输入两个整数:");
	scanf_s("%d,%d", &a, &b);
	if (a < b)
	{
		int temp = a;
		a = b;
		b = temp;
	}
	m = a * b;
	n = a % b;
	while(1)
	{
		if (n == 0)
			break;
		a = b;
		b = n;
		n = a % b;
	}
	printf("最大公约数为:%d",b);
	printf("\n最小公倍数为:%d", m/b);
	return 0;
}

结果:

 

 

b) 第二种方法:

还有一种很老套的方法,既然要求最大公因数,就运用for循环语句,从较小的那个数开始,观察其是否能被较大的数以及较小的数整除,如果能,该数即为两数间的最大公因数。

代码如下:

#include<stdio.h>
int main()
{
	int a, b,m=1, n=1;
	int i;
	printf("输入两个整数:");
	scanf_s("%d,%d", &a, &b);
	if (a < b)
	{
		int temp = a;
		a = b;
		b = temp;
	}
	for (int i = b; i >=1; i--)
	{
		if (a % i == 0 && b % i == 0)
		{
             n = i;
			 break;
		}	
	}
	m = n * (a / n) * (b / n);
	printf("最大公约数为:%d",n);
	printf("\n最小公倍数为:%d", m);
	return 0;
}

结果:

 

 

c)  第三种方法:

跟第二种方法类似,不过是通过从2开始,依次寻找最大公因数,方法过程大致如下所示:

#include<stdio.h>
int main()
{
	int a, b,m=1, n=1;
	int i=2;                   //令公因数从2开始
	printf("输入两个整数:");
	scanf_s("%d,%d", &a, &b);
	if (a < b)    //将较大值赋为a,较小值赋为b
	{
		int temp = a;
		a = b;
		b = temp;
	}
	for (; i <= b; i++)
	{
		if (a % i == 0 && b % i == 0)
		{
			n *= i;
			a /= i;
			b /= i;
			i = 2;
		}
	}
	printf("最大公约数为:%d",n);
	printf("\n最小公倍数为:%d", n*a*b);
	return 0;
}

 结果:

当然啦,以上三种小方法,之所以把第一种方法放在第一位是因为该方法所需的时间复杂度较小,而第二、第三种方法的时间复杂度更大。如果有大佬还有更好的方法,还请多多指教!

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值