当前位置: 首页 > news >正文

python:实现greatest common divisor最大公约数算法

greatest common divisor最大公约数算法介绍

计算最大公约数(Greatest Common Divisor, GCD)的算法有多种,其中最著名和常用的是欧几里得算法(Euclidean algorithm)。下面我会详细介绍欧几里得算法的基本思想及其实现方式。

欧几里得算法

欧几里得算法基于一个定理:两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。用数学表达式表示就是:

gcd(a, b) = gcd(b, a mod b)

其中,gcd(a, b)表示a和b的最大公约数,a mod b表示a除以b的余数。

算法步骤
比较两个数a和b,如果a小于b,则交换它们。
用a除以b,得到余数r。
如果r为0,则b就是最大公约数。
否则,将b赋值给a,将r赋值给b,然后回到步骤2。
实现代码(Python)

def gcd(a, b):while b != 0:a, b = b, a % breturn a# 示例
print(gcd(48, 18))  # 输出: 6

扩展欧几里得算法

扩展欧几里得算法(Extended Euclidean algorithm)不仅可以找到两个数的最大公约数,还可以找到满足Bézout等式ax + by = gcd(a, b)的整数解x和y。这在密码学、线性代数等领域有重要应用。

算法步骤

扩展欧几里得算法是在欧几里得算法的基础上,通过一系列的等式变换来求解x和y。

实现代码(Python)

def extended_gcd(a, b):if a == 0:return b, 0, 1else:gcd, x1, y1 = extended_gcd(b % a, a)x = y1 - (b // a) * x1y = x1return gcd, x, y# 示例
gcd, x, y = extended_gcd(48, 18)
print(f"gcd={gcd}, x={x}, y={y}")  # 输出: gcd=6, x=-1, y=3,即 48*(-1) + 18*3 = 6

这些算法是数学和计算机科学中处理整数关系时非常重要的工具。

## greatest common divisor最大公约数算法python实现样例

以下是一个使用欧几里得算法实现最大公约数的Python代码:

def gcd(a, b):while b != 0:a, b = b, a % breturn a# 测试
print(gcd(10, 25))  # 输出: 5
print(gcd(14, 28))  # 输出: 14
print(gcd(21, 14))  # 输出: 7
print(gcd(36, 48))  # 输出: 12

在这个代码中,我们使用了一个while循环,直到b等于0才停止循环。在每一次循环中,我们通过使用欧几里得算法的性质,将b更新为a除以b的余数,并且交换a和b的值。当b等于0时,循环停止,此时a的值就是最大公约数。

希望对你有帮助!


http://www.mrgr.cn/news/23339.html

相关文章:

  • Telephony STK 域选
  • 【高级编程】Java IO流(上)字节流 InputStream OutputStream
  • 2024 年高教社杯全国大学生数学建模竞赛B题_生产过程中的决策问题一二问解析(含全部代码)
  • 游戏开发简述
  • 【软件文档】项目计划书(Word原件完整版参考)
  • YOLO模型训练报错:_pickle.UnpicklingError: STACK_GLOBAL requires str
  • “短视频 + ”新业态下的高职院校数字媒体技术专业群建设方案
  • VueDraggable 使用指南
  • Reflection Llama-3.1 70B:目前最强大的开源大语言模型
  • LeetCode题练习与总结:完全二叉树的节点个数--222
  • 云端协同与全球数据共享的新时代
  • 【快速解决】搭建VUE+VScode+elementUI开发环境,Vue环境配置
  • Java 21的Concurrency的笔记
  • (二十八)Java 泛型
  • 第 3 篇 Helm 命令、环境变量、相关目录
  • golang学习笔记11——Go 语言的并发与同步实现详解
  • PowerShell连接国内版Exchange合规保护(EOP)的全面指南
  • Flask 第二课 -- 安装
  • C#迭代器和接口IEnumerable,IEnumerator
  • 使用多线程实现生产者-消费者模型:C++实战指南