C语言——练习:求最大公约数(GCD)和最小公倍数(LCM)

1.输入两个数得到其最大公约数和最小公倍数

(1)分析

在C语言中,求两个数的最大公约数(Greatest Common Divisor, GCD)和最大公倍数(Least Common Multiple, LCM)是常见的编程练习。首先,我们需要明确如何求两个数的最大公约数,然后再利用这个最大公约数来求得最大公倍数。

最大公约数(GCD):

最大公约数可以使用多种算法来求解,但欧几里得算法(Euclidean algorithm)是最著名且最常用的一种。该算法的基本思想是:gcd(a, b) = gcd(b, a mod b),其中a和b是两个正整数,gcd代表最大公约数,mod代表取余运算。算法一直递归进行,直到b为0,此时a即为两数的最大公约数。

简单来说,计算的流程为:首先a%b,余数为c,如果c != 0,则a = b,b = c,继续循环操作,直至a%b,余数为0,此时的b即为最大公约数。

其中:余数为0有两种情况:

1.a<b  :执行上述操作会将a和b的值进行交换,继续循环直至a可以被b整除,余数为0。

2.a可以被b整除:此时b的值就是最大公约数。

最大公倍数(LCM):

在得到两个数的最大公约数之后,我们可以利用以下公式来求得它们的最大公倍数:

LCM(a,b)=∣a×b∣​/GCD(a,b)

即最小公倍数=a和b的乘积除以最大公约数。

这里使用绝对值是因为a和b可能为负数,但最大公倍数定义为正数。

(2)代码实现
#include<stdio.h>

int getGcd(int a,int b)   //求最大公约数函数
{
	while(a%b != 0){        //只要余数不为0,进入循环
	                       //余数为0有两种情况:1.a<b  2.a可以被b整除
		int temp = b;     //先保留b原始的值
		b = a%b;         //将余数赋给b
		a = temp;       //将原始的b值赋给a
		printf("a=%d,b=%d\n",a,b);  //测试语句,打印出每次循环a和b的值
	}
	
	return b;
}

int getLcm(int a,int b,int dataGcd)  //求最小公倍数函数
{
	int dataLcm;
	
	dataLcm = a*b/dataGcd;
	
	return dataLcm;
}

int main()
{
	int data1;
	int data2;
	int dataGcd;
	int dataLcm;
	
	printf("请输入两个整数:\n");
	scanf("%d%d",&data1,&data2);
	
	dataGcd = getGcd(data1,data2);
	dataLcm = getLcm(data1,data2,dataGcd);
	
	printf("%d和%d的最大公约数为:%d,最小公倍数为:%d",data1,data2,dataGcd,dataLcm);
	return 0;
}

输出将是:

请输入两个整数:
2
11
a=11,b=2
a=2,b=1
2和11的最大公约数为:1,最小公倍数为:22

  • 24
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hardStudy_h

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值