C语言|求两个数的最大公约数和最小公倍数

Q:输入两个数a和b,计算并输出两个数的最大公约数和最小公倍数

A:如下,

1.计算最大公约数

方法一:常规法——先找两个数中较小的那个数,然后用较小的那个数一直减1,直到两个数都可以把这个数整除,这个数就是两个数的最大公约数。

例:18 和 12

①比较两个数,找较小那个:12

②较小的数一直-1:11,10,9,8,……,1

③直到找到同时被整除的数:6(18%6=0;12%6=0)

方法二:辗转相除法——用除数和余数反复做除法(上一步的除数做为被除数,余数做除数),直到余数为0,此时的除数就是最大公约数。

例:a        %        b        =        t

       18        %       12      =        6

       12        %        6       =        0      

2.计算最小公倍数

方法一:同计算最大公约数的方法一,找两个数中较大的那个,用较大的数一直加1,直到这个数可以同时整除这两个数,这个数就是最小公倍数。(这里的代码部分和上面同一个实现思路,就省略了)

 方法二:如果已经计算除了最大公约数,则最小公倍数=a*b/最大公约数

tip:如果是计算两个数的绝对值的最大公约数和最小公倍数要引入一个库函数——abs(数)——<math.h> 

 代码展示:

#include<stdio.h>
#include<math.h>
int main() {
	int a = 0;
	int b = 0;
	int max = 0;//最大公约数
	int min = 0;//最小公倍数
	scanf("%d %d", &a, &b);
    //绝对值函数abs()
	a = abs(a);
	b = abs(b);
	//最大公约数
	// 方法一:常规法
	if (a < b) {
		max = a;
	}
	else {
		max = b;
	}
	//2.最小的那个数一直-1直到a,b可以同时整除
	while (1) {
		if ((a % max == 0) && (b % max == 0)) {
			break;
		}
		max--;
	}
	方法二:辗转相除法
	//int t = 0;
	//while (a % b) {
	//	t = a % b;
	//	a = b;
	//	b = t;
	//}
	//printf("最大公约数为%d", b);
	//最小公倍数
	min = a * b / max;
	printf("最大公约数为%d\n", max);
	printf("最小公倍数为%d", min);
	return 0;
}

运行结果:

 

ok,好啦结束啦~✨

  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值