求两个数的最大公约数的三种方法及C语言实现方式

数据结构和算法-数学问题-最大公约数 本文为joshua317原创文章,转载请注明:转载自joshua317博客数据结构和算法-数学问题-最大公约数 - joshua317的博客 一、最大公约数说明 最大公约数,也称最大公因数、最大公因子,指两个或多个整数共有约数中最大的一个。 如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。约数和倍数都表示一个整数与另一个整数的关系,不能单独存在。比如,只能说8是某数的倍数,2是某数的约数,而不能孤立地说8是倍数,2是约数。 几个自然数公有的约数,叫做这几个自然数的公约数。其中最. 阅读详情

零、总述

本文主要讲述求两个数的最大公约数的三个算法及其C语言实现方式,本文需要了解最大公约数的定义(具体可自行百科或者或者其他途径了解)。

另外本文中C语言实现中使用的Max_sort函数是为了保证a一定是大于b,如果a<b,则将其交换,方便后续编码。代码如下:

int Max_sort(int *a, int *b)
{
	if (a == NULL || b == NULL) return -1;

	if (*a < *b)			//如果比较小则交换	
	{
		*a += *b;
		*b = *a - *b;
		*a -= *b;
	}
	return 0;
}

一、 算法本体

1.辗转相除法

流程图如上,需要求的值为a和b的最大公约数,此算法简单来说是:将a和b相除, 得到的余数赋值给c,并判断是否为0,如果不为0,则将b赋值给a,将c赋值给a, 然后重复上述步骤直到c为0。a%b=c,算法直观来看就是这个数学算式的左移操作。

//辗转相除法
int ZZXC_Function(int a, int b)
{
	int c = 0;
	Max_sort(&a, &b);
	c = b;
	do
	{
		b = c;
		c = a%b;
		a = b;
	} while (c != 0);
	return b;
}

2.更相减损法

流程图如上,需要求的值为a和b的最大公约数,此算法简单来说是:将a和b减, 得到的差值赋值给c,并判断是否为0,如果不为0,则将b赋值给a,将c赋值给a, 然后重复上述步骤直到c为0。a-b=c,算法直观来看就是这个数学算式的左移操作,和辗转相除法实现方式很是接近,应该本源思路是一样的。

//更相减损法
int GXJS_Function(int a, int b)
{
	int c = 0;
	Max_sort(&a, &b);
	c = b;
	do
	{
		b = c;
		a>b ? c = a - b : c = b - a;
		a = b;
	} while (c != 0);
	return b;
}

3.穷举法

流程图如上,需要求的值为a和b的最大公约数, 此算法穷举方式实现,简单粗暴,简单说就是比较a和b,将比较小的数赋值给c,将小于或等于c的每个值依次与a和b取模运算,如果刚好余数为0,即表示次数为a 和b的最大公因数,如果不是,则c值减1,重复上述步骤。如代码中所述,当数值比较大时,需要穷举的数也变多,效率明显下降。

//穷举法 当数值比较大时,明显效率下降
int QJ_Function(int a, int b)
{
	int c;
	Max_sort(&a, &b);
	c = b;

	while (a%c != 0 || b%c != 0)
	{
		c--;
	}
	return c;
}

二、后言

求最大公约数感觉上更多的是数学问题,使用数学模型用 C语言表达出来才得到上述算法,实际上求最大公约数还有质因数分解法和短除法等各种方法,只是在计算机语言实现方面,本文中三个方法更适合计算机的重复性而得以实现。所以算法可以不只上述几个,实现方式也因语言和逻辑而异,重要的是将这种二元的基本思维拓展到多元的思维中,在更加复杂的情况下解决相同的问题。 欢迎各位指出谬误或者不足之处,相互学习~

求N个数的最大公约数和最小公倍数 一、基本要求:求N个数的最大公约数和最小公倍数。用C或C++或java或python语言实现程序解决问题。 1.程序风格良好(使用自定义注释模板) 2.提供友好的输入输出,并进行输入数据的正确性验证。 第一种方法: 步骤一:输入两个数a,b。 步骤二:判断a与b的大小关系。 步骤三:判断较小的数是否能整除较大的数。 步骤四:写出不同条件下的计算公式。 步骤五:输出最大公约数divisor,最小公倍... 阅读详情

相关推荐

【C语言】实现求两个数的最大公约数【四种算法】

题目 给定两个数,求这两个数的最大公约数 例如: 输入:20 40 输出:20 解题思路 最大公约数:即两个数据中公共约数的最大者 求解的方式比较多,暴力穷举、辗转相除法、更相减损法、Stein算法算法 方法一:辗转相除法(推荐此方法) 思路: 例子:18和24的最大公约数 第一次:a = 18 b = 24 c = a%b = 18%24 = 18 循环中:a = 24 b=18 第二次:a = 24 b = 18 c = a%b = 24%18 = 6 循环中:a = 18 b

Edison's 小宇宙 9万+

C语言_最大公约数常用算法

四种方法分别为:辗转相除法、穷举法,更相减损法、 Stein算法 一、辗转相除法 1、函数嵌套调用流程图: 2、函数递归调用的程序流程图: 3、两个数的乘积=这两个数的最小公倍数*最大公约数 二、穷举法(利用数学定义) 穷举法(也叫枚举法)穷举法求两个正整数的最大公约数的解题步骤:从两个数中较小数开始由大到小列举,直到找到公约数立即中断列举,得到的公约数便是最大公约数 。 ①定义1:对两个正整...

qq_45915957的博客 3175

C/C++ 求两个数的最大公约数

求两个数的最大公约数 最大公约数的英文是Greatest Common Divisor,简称GCD。程序里面用gcd表示 方法1:从定义出发最直接法 从两个数中比较大的数开始计算,找不到就减小1。比如36和12两个数,就从36开始,36不是最大公约数,然后35也不是,34也不是,33也不是。一直到,14也不是,13也不是,最后到12,所以12就是最大公约数。 比如12和8。就从12开始,12不是最大公约数,然后11也不是,10也不是,一直到8也不是,7也不是,一直到4停止。4就是最大公约数。 #includ

weixin_42418881的博客 3700

求两个数的最大公约数的流程图

Du798566的博客 2万+

【给定两个数求它们的最大公约数——三种方法】

给定两个数求它们的最大公约数

qq_73900397的博客 2620

随机化策略——随机变量rand、约束constraint、权重dist、随机数产生示例

文章目录一、随机变量类型1.1.rand随机变量1.2.randc随机变量二、随机化约束2.1.constraint指定约束范围2.1.1.关系操作符约束(>、<、=、>=、<=)2.1.2.范围操作符约束(inside)2.1.3.权重分布约束(dist)2.1.4.条件约束(if-else; ->)三、启动随机化——randomize( )函数四、关闭或打开随机变...

Mr.翟的博客 2万+

【C语言练习】最大公约数求法(三种方法)

给定两个数,求这两个数的最大公约数。比如:20 40两个数的最大公约数为20。

embrace99的博客 5623

华为eNSP与VMware虚拟机联动实战:从零搭建仿真网络环境

本文详细介绍了如何从零开始搭建华为eNSP与VMware虚拟机的联动仿真网络环境。通过环境准备、网络适配器配置、eNSP与VMware网络集成、安全策略与NAT配置等步骤,帮助读者掌握构建企业级网络实验场景的关键技术。这种组合特别适合网络工程师进阶训练和华为认证考试准备,实现低成本、高灵活性的网络仿真实验。

weixin_30415113的博客 504

C语言求两个数的最大公约数的三种算法

1.相减法 #include&lt;stdio.h&gt; //相减法 int main() { int a,b; int c=0; //计数器 while(1) //循环判断的作用 { printf("输入两个数字求最大公约数:"); scanf("%d%d",&amp;a,&amp;b); while(a!=b) { if(a&gt;b) ...

gardenpalace的博客 4万+

freeswitch系列二 kamailio 5.0安装及实现kamailio集成freeswitch

kamailio是个纯粹的SIP服务器。本文介绍先如何在debian8下安装debian5.0,然后详细介绍如何实现使用kamailio做freeswitch均衡负载。kamailio同时实现做为代理服务器、注册服务器、重定向服务器。

不积跬步无以至千里; 不积小流无以成江海 1万+

数电-基于FPGA的自动售货控制系统设计

本次数电的课程设计是设计一款基于FPGA的自动售货控制系统,因为手上暂时没有FPGA的板子,所以先采用proteus仿真进行设计,观察系统效果,等之后FPGA板子下发,再移到quartus上调试和下载。同样是自己第一次自主设计电路系统,可能在功能上不完整或者逻辑上有错误,大家多多包涵,欢迎沟通交流。

gg1067的博客 2293

C语言 | 求两个数最大公约数的四种算法

给定两个数,求这两个数的最大公约数 最大公约数,也称最大公因数、最大公因子,指两个或多个整数共有约数中最大的一个。求解的方式比较多,暴力穷举、辗转相除法、更相减损法、Stein算法。 1.暴力穷举法 如果大数可以整除小数,那么最大公约数为小数。如果不能整除小数,那么这两个数就按大到小依次对比小数小的数求余,遇到都能够整除的,就是最大公约数。 #include<stdio.h> #include<windows.h> #pragma warning(disable:4996) int

xxzaa的博客 1万+

基于python+flask框架的基于微信小程序的CR公司建设项目信息管理系统-前台(开题+程序+论文) 计算机毕设

特别是随着移动互联网技术的普及,企业对便捷、高效的信息管理系统的需求日益迫切。另一方面,该系统集成了仓管、物料、财务、人事、供应商等多个模块,实现了数据的集中管理和信息共享,有助于企业实现精细化管理,降低运营成本,提升决策效率。:深入调研CR公司的业务需求,明确系统应具备的功能模块,包括仓管员管理模块(物料信息、退回记录、申请信息、仓库信息管理)、财务员管理模块(资金信息管理、采购与租赁款项处理)、人事管理模块、供应商管理模块、项目管理模块(项目信息、设备采购、物料采购、设备租赁)、以及考勤打卡模块等。

zhihao503的博客 960

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

C语言:求两个数的最大公约数和最小公倍数 求两个数的最大公约数:“辗转相除法”: 设两数为a和b(a>b),用a除以b,得a÷b=商…余数,若余数为0 ,则最大公约数为b;若余数不为0 ,则再用b÷余数, 得b÷余数=商1…余数1,若余数1=0,则最大公约数为余数,若余数1不为0,继续让商÷余数n,一直到能够余数为零 这时的除数即最大公约数。 求两个数的最小公倍数: 最小公倍数=两数的乘积÷...

qq_44024359的博客 3万+

Isaac Lab 强化学习全身控制策略 Sim2Real 宇树人形机器人训练部署 HOVER

《IsaacLab策略训练与部署指南》提供了在仿真和真实机器人上实现HOVER全身控制策略的完整流程。主要内容包括:1) Linux环境下的IsaacLab安装与HOVER资源库配置;2) 使用1024个并行环境训练教师/学生策略的详细步骤;3) 策略测试与评估方法;4) Sim2Sim仿真验证和Sim2Real真实机器人部署方案。本教程特别针对Unitree H1仿人机器人,包含运动数据准备、策略训练、性能评估到硬件部署的全链条实现方案,为机器人控制策略开发提供标准化参考框架。

机器人控制与仿真应用 3071

9.23华为OD机试真题 新系统 - 小菊的寻宝之旅 (Java/Py/C/C++/Js/Go)

9.23华为OD机试真题 新系统 - 小菊的寻宝之旅 (Java/Py/C/C++/Js/Go)

算法大师! 1002

你会求两个数的最大公约数吗(三种方法)?

如何求两个数的最大公约数是非常经典的问题,求解的方法也有很多,本文主要介绍其中的三种方法,分别是:枚举法、辗转相除法和更相减损法。

melonyzzZ的博客 1万+

AUTOSAR从入门到精通-【自动驾驶】特斯拉全自动驾驶(FSD)

特斯拉全自动驾驶系统(Full-Self Driving,简称FSD)是特斯拉公司开发的高级驾驶辅助系统,旨在通过神经网络技术实现环境感知与车辆控制,在驾驶员监督下完成导航、转向、变道、泊车等操作。‌ 该系统自2021年发布Beta测试版以来持续迭代,最新版本为2025年10月推出的v14版本。‌FSD v14版本基于端到端神经网络架构,取代了传统代码逻辑,通过数百万视频片段训练模型,以模仿人类驾驶决策。‌ 其功能覆盖住宅区街道、城市道路及高速公路,支持交通信号识别、自动变道和环岛通行等场景。

getusushu的博客 571

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

Today,让我来带大家学习一下如何用C语言写出求两个数的最大公约数和最小公倍数的代码,这个方法不仅在C语言中有用,其他语言都可以用的。 首先,来看看怎么求最大公约数,求最大公约数需要用到欧几里得算法,也称为辗转相除法。算法就是用两数中较大的数a除以另一个数b得出余数c,然后判断c是否为0(意思a能够整除b),为0则b为最大公因数;反之,则把b作为a,c作为b,继续上面的操作,直至余数为0. ...

漫步网络 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

求两个数的最大公约数(三种方法)

求两个数的最大公约数。 方法1:通过辗转相除法来求两个数的最大公约数 //思路 //排序:首先创建一个临时变量,然后将两个数排序,将较大的数存入a中,将较小的数存入b中 //创建一个while循环,用较大的数去反复取余较小的数,并将取余得到的结果赋值给较小的数 //反复进行上述的while循环直到满足较大的数取余较小的数为0时,跳出循环 //最后输出的较小的数就为这两个数的最大公约数 #inclu...

bingXxx的博客 3万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

求两个数的最大公约数的三种算法

从键盘输入两个整数,求着两个整数的最大公约数。 解题思路: 从键盘输入两个数,通过以下的三个方法实现求两个数的最大公约数:     辗转相除法:取两个数中最大的数做除数,较小的数做被除数,用最大的数除较小数,如果余数为0,则较小数为这两个数的最大公约数,如果余数不为0,用较小数除上一步计算出的余数,直到余数为0,则这两个数的最大公约数为上一步的余数。 相减法:取两个数中的最大的数

爱音乐的Probie的博客 8万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【C语言初阶】求两个数的最大公约数,三种算法

求两个数的最大公约数,三种算法

枫叶先生的博客 1万+

求两个数的最大公约数的三种做法

1.相减法 两个数,相等时,最大公约数为他们其中任意一个。不相等时,用大数减小数。得到的差和之前的那个小数再次相减,直到两个数相等,这两个中,任意一个都是最大公约数。(代码如下) #include&lt;stdio.h&gt; int main() { int a = 0; int b = 0; printf("请任意输入两个数:"); scanf("%d%d", &amp;a, &...

yuemeicheng的博客 5万+

C语言求两个数的最大公约数、最小公倍数(三种方法)

最大公约数:也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。(如果数a能被数b整除,a就叫做b的倍数,b就叫做a的约数) 最小公倍数:两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。 以两个整数为例,我们知道最小公倍数=两整数乘积 / 最大公约数。那么在求出最大公约数的基础下,利用该公式便可求出最小公倍数。 那么如何求两个...

ty6693的博客 2万+

求两个数的最大公约数的三种算法总结

很有用的总结:转自https://blog.youkuaiyun.com/only_invarably/article/details/64967860 从键盘输入两个整数,求着两个整数的最大公约数。 解题思路: 从键盘输入两个数,通过以下的三个方法实现求两个数的最大公约数: 辗转相除法:取两个数中最大的数做除数,较小的数做被除数,用最大的数除较小数,如果余数为0,则较小数为这两个数的最大公约...

香蕉的博客 4628
上一篇: 详细解析电源滤波电容的选取与计算
下一篇: 理解字节序---大端小端
CryptonymAMS
博客等级 码龄10年 95粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值