最大公约数的求法--(C语言实现)详细解读


题目概述

题目内容:
给定两个数,求这两个数的最大公约数

例如:

输入: 20 40

输出:20

输入:5 7

输出:1


一、题目分析

由题目可得输入两个数,求最大公约数
1、最大公约数什么:两个整数共有约数最大的一个称为最大公约数。
2、如何求最大公约数:
假设两个数A和B,最大的公约数可能为两个数中较小值(从较小值入手,从较小值找到的可以整除A,B的整数一定为最大公约数)。
思路一
例如:
整除类型:从(15 5,18 6)中找较小值,5,6分别为它们的最大公约数。
非整除类型:从(18 20)找较小值18,就需要判断能否整除,不能整除最小值就-1(得到值17 16 15 …3 2),再重复上述判断,最终找到最大公约数2.
思路二
利用数学中的辗转相除法

二、思路转换为代码

方法1.

利用三目操作符将输入的a,b中较小的值存在t中
判断最大公约数的条件 -> a % b ==0&&b % t ==0
一次判断不能确定正好是最大公约数,需用的循环while(),每判断一次t-1,最后找到整除的最大公约数返回.

int GCD(int a, int b)
{
	int t = a < b ? a : b;
	//求最大公约数
	while (1)
	{
		if (a % t == 0 && b % t == 0)
		{
			return t;
		}
		t--;
	}
}

方法2.

辗转相除法:假设输入值 a,b,公式a % b = t ; a = b; b = t;
优点:效率高,不用求取a,b中的较小值
当a>b时
在这里插入图片描述

当a<b时
相当于多转换了一步其余步骤同上
在这里插入图片描述

代码如下(示例):

int GCD(int a, int b)
{
	
	//求最大公约数
	//a%b=t
	int t = 1;
	while (a % b)
	{
		t = a % b;
		a = b;
		b = t;
	}
	return b;
}

代码优化:

上述求余相对于求了两遍

int GCD(int a, int b)
{
	
	//求最大公约数
	//a%b=t
	int t = 1;
	while (t = a % b)
	{
		a = b;
		b = t;
	}
	return b;
}

总代码

int GCD(int a, int b)
{
	
	//求最大公约数
	//a%b=t
	int t = 1;
	while (t = a % b)
	{
		a = b;
		b = t;
	}
	return b;
}
int main()
{
	int a, b;
	scanf("%d %d", &a, &b);
	int ret=GCD(a, b);
	printf("最大公约数=%d\n", ret);

	return 0;
}

总结

C语言的简单练习,学习辗转相除法的思想,把问题转换为代码以解决问题,小试牛刀,如有错误希望读友指正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值