【算法实践】| 一步步带你实现寻找最大公约数

简介: 在实现之前我们先来了解一下什么是最大公约数,以及我们常用的计算最大公约数的方法或者说数学方法。概念最大公约数,也称最大公因数、最大公因子。他是一个能够被若干整数同时整除的整数,如果一个整数同时是几个整数的约数,则称这个整数为他们的公约数,公约数中最大的数成为最大公约数,1是任意若干的正整数的公约数。比如:一个数既是数A的约数,又是数B的约数,称为A,B的公约数,A,B的公约数中最大的一个(可以包括AB自身)称为AB的最大公约数,a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也有同样的记号。这么一大段可以概括为:最大公约数:指两个或

前言

在实现之前我们先来了解一下什么是最大公约数,以及我们常用的计算最大公约数的方法或者说数学方法。

概念

最大公约数,也称最大公因数最大公因子。他是一个能够被若干整数同时整除的整数,如果一个整数同时是几个整数的约数,则称这个整数为他们的公约数,公约数中最大的数成为最大公约数,1是任意若干的正整数的公约数。比如:一个数既是数A的约数,又是数B的约数,称为A,B的公约数,A,B的公约数中最大的一个(可以包括AB自身)称为AB的最大公约数,a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也有同样的记号。这么一大段可以概括为:

最大公约数:指两个或多个整数共有约数中最大的一个。


求最大公约数的方法


常见的有质因数分解法、短除法、辗转相除法、更相减损法。与最大公约数相对应的概念是最小公倍数,a,b的最小公倍数记为[a,b]。(先埋个小彩蛋:下一篇文章我们可以接着探索一下最小公倍数的计算方法)

短除法和辗转相除法是我们在数学解题中常用的两种方法。而且短除法也是我们在求二进制数时常用的方法,辗转相除法求可用来求解不定方程的一组整数解,这是它在数学中最常见的应用,辗转相除法处理大数时非常高效,它需要的步骤不会超过较小数的位数(十进制下)的五倍(加百利·拉梅(GabrielLamé)于1844年证明了这点,开创了计算复杂性理论)。辗转相除法的运算速度为 O(n),其中 n 为输入数值的位数。


求解流程


本文通过穷举法辗转相除法这两种个方法来寻找最大公约数。下面我们来看看两种的方法的具体流程:


穷举法流程图


网络异常,图片无法展示
|


辗转相除法流程图


辗转相除法终止条件是 余数=0

除数是最小公约数

网络异常,图片无法展示
|


算法实现


穷举法


步骤:

  1. 输入两个正整数
  2. 找到其中较小的数,并记录为min
  3. 使用穷举法,查找可以整除x,y两个值的数字,并记录为Flag.Flag小的值会被大的值覆盖掉
  4. 返回Flag,就是x和y最大的公约数

代码如下:


defFindgcd(x,y):
ifx<y:
min=yelse:
min=xforiinrange(1, min+1):
if((x%i==0) and (y%i==0)):
Flag=ireturnFlagx=int(input("请输入第一个整数:"))
y=int(input("请输入第二个整数:"))
print(x,",", y, "的最大公约数为:", Findgcd(x,y))


执行结果如下:

网络异常,图片无法展示
|


辗转相除法


  1. 如果a<b,则交换两数位置,否则不交换
  2. 求a/b的余数
  3. 在余数不为零时,始终进行交换和相除  
  4. 余数为零后,打印输出b


代码如下:


x=int(input("请输入第一个整数:"))
y=int(input("请输入第二个整数:"))
ifx<y: #如果x<y,则交换两数位置,否则不交换x,y=y,xr=x%ywhiler!=0: #在余数不为零时,不断进行交换和相除x,y=y,rr=x%yprint(x,",", y, "的最大公约数为:",y)


执行结果如下:


辗转相除法优化

1.递归
defgcd(x , y):
ify==0:
returnxelse:
returngcd(y, x%y)
a=int(input("请输入第一个整数:"))
b=int(input("请输入第二个整数:"))
print(x,",", y1, "的最大公约数为:",gcd(a,b))
2.非递归
x=int(input("请输入第一个整数:"))
y=int(input("请输入第二个整数:"))
y1=y;
whiley:
x,y=y,x%yprint(x,",", y1, "的最大公约数为:",x)
目录
相关文章
|
11月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
312 3
|
4月前
|
存储 算法 安全
如何控制上网行为——基于 C# 实现布隆过滤器算法的上网行为管控策略研究与实践解析
在数字化办公生态系统中,企业对员工网络行为的精细化管理已成为保障网络安全、提升组织效能的核心命题。如何在有效防范恶意网站访问、数据泄露风险的同时,避免过度管控对正常业务运作的负面影响,构成了企业网络安全领域的重要研究方向。在此背景下,数据结构与算法作为底层技术支撑,其重要性愈发凸显。本文将以布隆过滤器算法为研究对象,基于 C# 编程语言开展理论分析与工程实践,系统探讨该算法在企业上网行为管理中的应用范式。
128 8
|
4月前
|
监控 算法 数据处理
基于 C++ 的 KD 树算法在监控局域网屏幕中的理论剖析与工程实践研究
本文探讨了KD树在局域网屏幕监控中的应用,通过C++实现其构建与查询功能,显著提升多维数据处理效率。KD树作为一种二叉空间划分结构,适用于屏幕图像特征匹配、异常画面检测及数据压缩传输优化等场景。相比传统方法,基于KD树的方案检索效率提升2-3个数量级,但高维数据退化和动态更新等问题仍需进一步研究。未来可通过融合其他数据结构、引入深度学习及开发增量式更新算法等方式优化性能。
130 17
|
4月前
|
存储 监控 算法
基于 C# 时间轮算法的控制局域网上网时间与实践应用
在数字化办公与教育环境中,局域网作为内部网络通信的核心基础设施,其精细化管理水平直接影响网络资源的合理配置与使用效能。对局域网用户上网时间的有效管控,已成为企业、教育机构等组织的重要管理需求。这一需求不仅旨在提升员工工作效率、规范学生网络使用行为,更是优化网络带宽资源分配的关键举措。时间轮算法作为一种经典的定时任务管理机制,在局域网用户上网时间管控场景中展现出显著的技术优势。本文将系统阐述时间轮算法的核心原理,并基于 C# 编程语言提供具体实现方案,以期深入剖析该算法在局域网管理中的应用逻辑与实践价值。
94 5
|
9月前
|
机器学习/深度学习 人工智能 算法
深入解析图神经网络:Graph Transformer的算法基础与工程实践
Graph Transformer是一种结合了Transformer自注意力机制与图神经网络(GNNs)特点的神经网络模型,专为处理图结构数据而设计。它通过改进的数据表示方法、自注意力机制、拉普拉斯位置编码、消息传递与聚合机制等核心技术,实现了对图中节点间关系信息的高效处理及长程依赖关系的捕捉,显著提升了图相关任务的性能。本文详细解析了Graph Transformer的技术原理、实现细节及应用场景,并通过图书推荐系统的实例,展示了其在实际问题解决中的强大能力。
1061 30
|
9月前
|
存储 算法
深入解析PID控制算法:从理论到实践的完整指南
前言 大家好,今天我们介绍一下经典控制理论中的PID控制算法,并着重讲解该算法的编码实现,为实现后续的倒立摆样例内容做准备。 众所周知,掌握了 PID ,就相当于进入了控制工程的大门,也能为更高阶的控制理论学习打下基础。 在很多的自动化控制领域。都会遇到PID控制算法,这种算法具有很好的控制模式,可以让系统具有很好的鲁棒性。 基本介绍 PID 深入理解 (1)闭环控制系统:讲解 PID 之前,我们先解释什么是闭环控制系统。简单说就是一个有输入有输出的系统,输入能影响输出。一般情况下,人们也称输出为反馈,因此也叫闭环反馈控制系统。比如恒温水池,输入就是加热功率,输出就是水温度;比如冷库,
1238 15
|
11月前
|
机器学习/深度学习 算法 Python
探索机器学习中的决策树算法:从理论到实践
【10月更文挑战第5天】本文旨在通过浅显易懂的语言,带领读者了解并实现一个基础的决策树模型。我们将从决策树的基本概念出发,逐步深入其构建过程,包括特征选择、树的生成与剪枝等关键技术点,并以一个简单的例子演示如何用Python代码实现一个决策树分类器。文章不仅注重理论阐述,更侧重于实际操作,以期帮助初学者快速入门并在真实数据上应用这一算法。
|
11月前
|
机器学习/深度学习 人工智能 Rust
MindSpore QuickStart——LSTM算法实践学习
MindSpore QuickStart——LSTM算法实践学习
171 2
|
数据采集 算法 物联网
【算法精讲系列】阿里云百炼SFT微调实践分享
本内容为您提供了百炼平台SFT微调的实践案例,帮助您方便并快速借助模型微调定制化您自己的专属模型。
2995 14
|
11月前
|
机器学习/深度学习 算法 数据建模
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
189 0

热门文章

最新文章