C语言求两个数的最大公约数和最小公倍数--自我理解

人之所以痛苦,那是因为你在成长。--------magic_guo

首先我们来了解一下定义:
最小公倍数:两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数
最大公约数:最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个

最小公倍数 = 两整数的乘积÷最大公约数

所以我们先来求两个数的最大公约数:

主函数:

# include<stdio.h>


//最大公约数,指两个或多个整数共有的约数中最大的一个

int main(void)
{
	int hcp1(int, int);								//对于函数的前置声明
	int hcp2(int, int);								//对于函数的前置声明
	int hcp3(int, int);								//对于函数的前置声明
	int a, b, m;
	printf("请输入两个整数,求其最大公约数:");
	scanf("%d %d", &a, &b);
	m = hcp2(a, b);									//调用其中的一种方法
	printf("%d和%d的最大公约数为:%d\n", a, b, m);

	return 0;
}

1.辗转相除法
流程图如下:
在这里插入图片描述
话不多说直接上代码:

//辗转法求最大公约数
int hcp1(int a, int b)
{
	int c;
	while(b!=0)		//判断b是否为0,其实还是判断了a%b的值。
	{
		c = a%b;	//将a%b的值赋给c
		a = b;		//将b的值赋给a
		b = c;		//将c的值赋给b
	}
	
	return a;		//当a%b的值为0时,跳出循环,返回的是b的值,在上面已经赋给了a
	
}

2.辗转相减法
<图片画了好久感觉还是不满意,,,就不上图了>

//辗转相减法求最大公约数
int hcp3(int a, int b)
{
	while(a!=b)			//使用a和b相减(大数减小数),直至a=b,停止循环
	{
		if (a>b)		//判断a和b的大小
			a = a-b;	//将a-b的值赋给a,再进行比较
		else
			b = b-a;	//如果a小于b,则将b-a的值赋给b,再进行比较
	}
	return a;			//返回a或者b都是可以的,最后a=b
}

3.穷举法
流程图如下:
在这里插入图片描述
代码:

//穷举法求最大公约数
int hcp2(int a, int b)
{	
	int i;
	
	for (i=a; i>0; i--)			//将a或b的值赋给i,从i开始递减循环,直至找到最大公约数
		if (a%i==0 && b%i==0)	//当a%i和b%i的值都为0时,i即为a和b的最大公约数
			break;
	return i;
}

最小公倍数:

上面的公式已经给出,求出最大公约数,使用两个数的积除以最大公约数即可得。
只用调用一下求最大公约数的函数即可,
读者自行思考一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值