栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

最大公约数和最小公倍数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

最大公约数和最小公倍数

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

a) 第一种方法:
#include
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
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
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;
}

 结果:

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

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1004831.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号