C语言求最大公约数常见思路

article/2025/10/13 9:10:14

一、辗转相除法

辗转相除法又称为欧几里得算法,用于求两数的最大公约数gcd(全称为greatest common divisor)

注意两数必须为非负整数a,b。用法为:用两数中较大的数(a1)除以较小的数(b1),得到余数(r1),再用b1除以r1得到余数r2,之后再用r1除以r2,反复进行,直到最后余数是0为止。最大公约数就是最后式子中的除数。请看如下举例:

 若用函数gcd(a,b)来表示,即gcd(a,b)=gcd(b,a%b),我们可以这样理解:3887 2231和2231 1656的最大公约数是相等的,依次类推、重复操作。用表达式可以这样来表示:gcd(3887,2231)=gcd(2231,1656)=gcd(1656,575),直到最后到底gcd(a,b)=gcd(c,0),即gcd(3887,2231)=gcd(23,0)。这里的c为a和b的最大公约数。

下面来看辗转相除法的图像说明

维基百科动态图

下面看算法实现:

算法实现一

 

代码中的a就相当于上述gcd(a,b)=gcd(c,0)中的c。当然还有利用此原理的其他写法,不过是大同小异,这里就不一一列举了。这里的if语句其实是多余的,因为通过辗转相除完全可以实现两数之间的互换。

算法实现二(函数递归法

 对辗转相除足够熟悉后,可以采用递归的方式,如算法实现三

算法实现三(递归思想)

总之一句话:除数除以余数,直到余数为0为止。

二、更相减损之术

更相减损之术出自我国《九章算术》,原文是这样的:

可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。

算法过程:大数减小数,得到的差用来替换之前的大数,如此反复,直到得出来的差与上次的减数相等。此时的这个差就是两者的最大公约数。

以 36 24为例(如下图):

 可以这样表示:gcd(36,24)=gcd(24,12),即36 24和24 12的最大公约数是相等的。

下面来看代码实现

 总归一句话:用大数减去小数,知道减数和差相等。

最后,当处理较大的数时,辗转相除法虽然在时间上有明显优势。但是,即使是这样,辗转相除法也同样存在缺陷,其在处理较大的素因数(也叫质因数,就是说一个数是另一个数的因数,本身又是质数,就叫做另一个数的素因数)时,缺陷就会显现出来。

当然,实现求取最大公约数还有很多其他方法,这里只进行了常见思路的讲解。


http://chatgpt.dhexx.cn/article/vn2C2FU7.shtml

相关文章

用函数求最大公约数c语言,C语言求最大公约数公式分享

从键盘输入两个正整数 a 和 b,求其最大公约数和最小公倍数。 算法思想 利用格式输入语句将输入的两个数分别赋给 a 和 b,然后判断 a 和 b 的关系,如果 a 小于 b,则利用中间变量 t 将其互换。再利用辗转相除法求出最大公约数&#…

c语言分解质因数法求最大公约数,最大公约数求法大全

原标题:最大公约数求法大全 小复习 上一次我们介绍了一种特殊的最大公约数求法,叫做辗转相除法。你还记得吗? 辗转相除法 用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数&a…

java实现求最大公约数

题目:任意输入两个整数,如何求他们的最大公约数? 最大公约数:也称最大公因数,最大公因子,是指两个或多个整数共有约数中最大的一个。 方法一:枚举法 先输入两个整数,然后比较两个…

C语言用for循环求最大公约数,C语言循环结构 -C语言求最大公约数

这是一个C语言 while 循环示例:求正整数 m 和 n 的最大公约数。 问题分析 输入:两个正整数。 输出:一个正整数(最大公约数)。 最大公约数(gcd)是指几个数共有的因数之中最大的一个数,比如 8 和 12 的最大公约数是 4,一…

求最大公约数的4种方法C语言(辗转相除法、辗转相减法、穷举法、递归法)

最大公约数,也称最大公因数、最大公因子,指两个或多个整数共有约数中最大的一个。 目录 问题描述 辗转相除法(欧几里得算法) 代码实现 辗转相减法 代码实现 暴力穷举法 代码实现 递归法 代码实现 测试及结果 问题描述…

自由度为什么是n-1?敲黑板敲黑板啦

在抽样分布定理中相信很多小伙伴都很疑惑,这个为什么第三个服从的是自由度为n-1的卡方?话不多说,我们一起来看看吧 同理,这个默认的条件限制,也是当初为什么要进行修正样本方差。如果各位小伙伴还有疑问,可…

什么是GUN?

1 什么是GUN? 既然是说linux,那就不得不提下GNU,就是因为GNU才使得包括linux在内的很多开源软加蓬勃发展起来。 GNU技术是在1983年9月27号公开发起的,创始人是Richard Stallman,目的是创建一套完全自由的操作系统。 由于当时Uni…

工业机器人的自由度是什么?

机器人家上了解到,随着机器人产业的飞速发展,工业机器人已经广泛应用于各行各业,从材料搬运到机器维护,从焊接到切割,从装配到喷涂,我们发现,这些工业机器人形状各异,功能性能各不相…

总时差与自由时差

定义 总时差(总浮动时间)(TF,Total Free Time,不耽误项目总进度)LS(Latest Start)-ES(Earliest Start)LF(Latest Finish)-EF&#xff…

【概率论与数理统计】如何理解自由度n?

统计学上常常说的自由度是到底是什么? 在样本方差计算中,分母不是样本数量,而是样本量减一,人们一般认为减一是因为缺少一个自由度的原因,那么这个自由度的概念到底是什么? 解答 自由度不容易解释&#x…

自由变量

1,作用域和自由变量 作用域代表了一个变量的合法范围,一个变量的作用域是程序源代码中定义的这个变量的区域。 1,全局作用域 不在任何函数内声明的变量(函数内省略var的也算全局)称作全局变量 就是在最外层定义的变量…

谓词逻辑——自由变元与约束变元

谓词逻辑 命题逻辑在是具有局限性的。 命题逻辑在处理语句成分中有诸如“否”、“并”、“或”和“如果那么”时, 取得了令人满意的结果, 但人类语言比这丰富得多, 我们如何处理如“存在”, “所有”,“在中”&#x…

JS - 自由变量与作用域链

先解释一下什么是“自由变量”。 在A作用域中使用的变量x,却没有在A作用域中声明(即在其他作用域中声明的),对于A作用域来说,x就是一个自由变量。如下图 如上程序中,在调用fn()函数时,函数体中第…

2. 自由度

目录 1. 自由度的定义 2. 自由度的计算 2.1 刚体的自由度 2.2 运动副 2.3 自由度算例 2.4 自由度计算公式 3. 总结 1. 自由度的定义 自由度在很多领域中会出现,对于机器人而言,我们这里谈的也就是机构的自由度。任何一台机器人都可以认为是一个机…

自由度

刚体的自由度 自由度指物体能够对坐标系进行独立运动的数目,物体所能进行的运动如下图: 一个物体可以相对于坐标系,进行三个平移和三个旋转运动,即一个简单的物体有六个自由度。 2 运动副与关节 运动副是两构件直接接触并能产…

约束度与自由度

约束度与自由度 无论是在机械原理与机械设计课程,还是在理论力学课程中,我们都会遇到约束度与自由度,但我未曾想在宇哥的线性代数课上也能听到这两个熟悉的名词。在线性代数第四讲线性方程组课程中,宇哥在讲到齐次线性方程组的有解…

这是你希望的自由职业么

每到周末文章的打开率和阅读量就变得惨淡的不行,索性就不分享干货,闲聊一下九月份私活结束后的自由职业经历。看看这是否是你向往的自由职业生活状态么? 九月份,忙完了手头的项目,也没心思找工作,一心想着借…

计算机屏幕截图按什么键,电脑按什么键自由截图

在我们工作生活中经常需要用到电脑截图来截取保存些重要信息,不过对于电脑新手来说还是不太清楚电脑怎么截图,问小编电脑按什么键自由截图。那今天小编就给大家介绍一个电脑截图的快捷方式,希望能帮到大家。 台式电脑使用快捷键进行截图&…

什么是机器人的自由度

自由度是机器人的一个重要技术指标,它是由机器人的结构决定的,并直接影响到机器人的机动性。 1. 刚体的自由度 物体上任何一点都与坐标轴的正交集合有关。物体能够对坐标系进行独立运动的数目称为自由度(DOF,degree of freedom)。…

讲讲什么是自由度

总第223篇/张俊红 我们在前面的方差分析中有提过一个概念就是自由度,在前面文章中给了一个计算就是自由度样本数-1。这一篇就来具体聊聊什么是自由度。 先来看看百度百科的解释: 自由度(degree of freedom, df)指的是计算某一统计量时,取值不…