求两个数的最大公约数的三种方法及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

Golang实现企业级AI智能体安全合规自动化检测系统

需求:自动化解析欧盟AI法案、中国网络安全法、美国NIST框架等多国法规,提取具体合规要求并映射到企业技术实现。技术挑战法规文本非结构化,语义复杂,存在大量法律术语与技术术语交叉多语言支持(中文、英文、欧盟24种官方语言)法规动态更新(平均每季度更新2-3次)架构创新性:提出了"规则引擎+AI模型+实时监控"的混合架构,兼顾了合规要求的明确性与智能体行为的动态性。性能突破:通过Golang协程、多级缓存、数据库优化等技术,实现了12,800 req/s的高吞吐量和38ms的低延迟。准确性提升。

shao.bing的专栏 723

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

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

embrace99的博客 5623

MICS-6814多气体传感器与ESP32-C3 Mini接口构建空气监测系统

cararenuity C3 Mini的多个ADC引脚,Wi-Fi和蓝牙LE以及紧凑的设计使其成为嵌入式物联网应用的绝佳选择。在这个项目中,我们将把MICS-6814多气体传感器与基于esp32 -C3的开发板cararenuity C3 Mini连接起来。更多模拟引脚:与ESP8266只有一个ADC引脚不同,基于esp32 -C3的cararenuity C3 Mini提供多个ADC引脚,使其成为多传感器应用的理想选择。紧凑可靠:该板的小尺寸使其成为嵌入式应用的理想选择,而不会牺牲性能。

hie98894的博客 770

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万+

D触发器版图设计的艺术:最小化面积与最大化性能的平衡之道

本文探讨了D触发器版图设计中如何平衡最小化面积与最大化性能的核心挑战。通过分析晶体管布局、互联优化、时钟分布等关键策略,结合先进制程下的功耗与信号完整性考量,为数字IC工程师提供了从基础优化到制造验证的实用解决方案,助力实现高性能、低面积的芯片设计。

aa123的博客 911

WblockCloneObjects克隆一个图纸内的实体包括块参照,同名块参照的处理

public static void HeBingTu2(double lieJu, List<string> filePaths) { Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; using (DocumentLock docLock = doc.Lock...

1108

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

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

xxzaa的博客 1万+

【2026年阿里巴巴集团暑期实习- 4月25日-算法岗-第二题- 矩阵计数】(题目+思路+Java&C++&Python解析+在线测试)

摘要: 给定两个非负整数序列a和b,构造n×m矩阵C,其中C[i][j]=a[i]×b[j]。统计矩阵中元素≥k的数量。解法是先对数组b排序,然后对于每个a[i],若k=0则直接累加m;若a[i]=0且k>0则跳过;否则计算需要的最小b[j]值,在排序后的b中使用二分查找确定满足条件的元素数量。时间复杂度为O((n+m)log m),空间复杂度O(1)。代码实现了排序和二分查找的高效组合。

m0_73659489的博客 65

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万+

CRC_16---ModBus 计算方法及代码实现

1、 CRC寄存器初始值为 0xFFFF;即16个字节全为1; 2、 CRC-16 / ModBus的多项式0xA001H (1010 0000 0000 0001B) ; ‘H’表示16进制数,‘B’表示二进制数。 计算步骤为: (1).预置 16 位寄存器为十六进制 0xFFFF(即全为 1) ,称此寄存器为 CRC 寄存器; (2).把第一个 8 位数据与 16 位 CRC 寄存器的低位相异或,把结果放于 CRC 寄存器; (3).检测相异或后的CRC寄存器的最低位,若最低位为1,CRC寄存器

1万+

【数据分享】1985-2023 年中国 30m 生长季 NDVI 数据集:刘小平团队力作,Landsat 无缝融合无云产品

中山大学刘小平团队发布1985-2023年中国30m分辨率生长季Landsat NDVI数据集,解决了传统数据的三大痛点:无缝拼接、时间连续和质量可靠。该数据集基于5-9月生长季Landsat影像,通过云检测、多景融合等技术生成,已在GEE平台开放共享。其高分辨率、长时序特性为植被动态监测、LUCC研究等提供重要支撑,在农业、生态保护等领域具有广泛应用价值。

国科大硕士在读,分享Python/GEE/Matlab/R专业代码实践,涵盖数据分析、算法开发与应用技巧等,以代码会友。 1513

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

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

melonyzzZ的博客 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

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

漫步网络 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

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

bingXxx的博客 3万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

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

爱音乐的Probie的博客 8万+

【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、付费专栏及课程。

余额充值