求最大公约数--辗转相除法(欧几里得算法) C语言

算法描述

求两个正整数的最大公约数

选择用辗转相除法

step 1

输入两个正整数 a、b

step 2

计算a与b的余数rem

step 3

判断rem是否为0,若不为0,则将rem赋值给b,将b赋值给a,在进行step 2。直到rem的值为0

备注:

由于是a%b,所以a本应为较大的数字,故应先进行判断a与b的大小,但在实际操作中,会发现,假设a=2,b=12,rem=a%b=2,此时,rem不为0,交换数字,a=12,b=2,这个时候,a与b的值进行了交换,a是较大的数字,b是较小的数字。

这个思路减小的代码的长度,比较简单

代码

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a,b,rem;
	scanf("%d%d",&a,&b);
	
	while(1)
	{
		rem=a%b;
		if(rem==0)
		{
			printf("%d\n",b);
			break;   //输出最大公约数 
		} 
		else
		{
		a=b;
		b=rem;	   //辗转相除法,把较小的值赋给a,把余数赋给b 
		} 
	}
	return 0;
} 

总结

解决最大公约数一般是用辗转相除法,要先理解辗转相除法解决的思路,在根据思路一步一步地精简代码

辗转相除法:

用较大的数除以较小的数,余数和较小的数构成一对数,继续相除,直到大数被小数除尽为止,则较小的数就是最大公约数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值