欧几里得算法与扩展欧几里得算法详解

news/2025/10/3 20:53:42/文章来源:https://www.cnblogs.com/ofnoname/p/19124865

在数论和密码学中,欧几里得算法(Euclidean Algorithm)是一个古老而重要的算法,用于计算两个整数的最大公约数(GCD)。

欧几里得算法(更相减损法)

欧几里得算法基于以下原理:两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数。用数学公式表示为:

\[\gcd(a, b) = \gcd(b, a \bmod b) \]

当余数为0时,此时的除数就是最大公约数。

  1. 较大数除以较小数,得到余数
  2. 较小数除以余数,再次得到新的余数
  3. 重复这个过程,直到余数为0
  4. 此时的除数就是最大公约数
// 递归实现
int gcd_recursive(int a, int b) {if (b == 0) return a;return gcd_recursive(b, a % b);
}// 迭代实现
int gcd_iterative(int a, int b) {while (b != 0) {int temp = b;b = a % b;a = temp;}return a;
}

中国古代的更相减损术是中国古代数学著作《九章算术》中记载的一种求最大公约数的方法,成书于东汉时期(约公元1世纪)。《九章算术》的"方田"章中记载:

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

更相减损术的核心思想是:两个数的最大公约数等于较小数与两数差的最大公约数。用现代数学符号表示为:

\[\gcd(a, b) = \gcd(\min(a, b), |a - b|) \]

当两数相等时,这个相等的数就是最大公约数。减法实际上可以替换为除法取余(减到不能再减),这样就接近现代使用的欧几里得算法了。

欧几里得算法的时间复杂度

其时间复杂度为 \(O(\log(\min(a, b)))\)

可以使用数学知识证明(有难度),欧几里得算法在计算 \(\gcd(a, b)\) 时,最多执行 \(2 \cdot \lfloor \log_2 b \rfloor + 1\) 次除法操作(最坏情况为当输入为连续的斐波那契数时)。平均除法的次数是 \(\frac{12 \ln 2}{\pi^2} \ln n \approx 0.843 \ln n\)

扩展欧几里得算法

扩展欧几里得算法不仅计算 \(\gcd(a, b)\),还找到整数 \(x\)\(y\),使得满足贝祖等式

\[ax + by = \gcd(a, b) \]

即让 \(a\)\(b\) "拼出" 其最大公约数。

在欧几里得算法的每一步中,我们有:

  • \(a = bq + r\),其中 \(q\) 是商,\(r\) 是余数
  • \(\gcd(a, b) = \gcd(b, r)\)

我们可以将余数 \(r\) 表示为:

  • \(r = a - bq\)

在递归的返回过程中,我们利用这个关系来构造 \(x\)\(y\)

int extended_gcd(int a, int b, int &x, int &y) {if (b == 0) {x = 1;y = 0;return a;}int x1, y1;int gcd = extended_gcd(b, a % b, x1, y1);x = y1;y = x1 - (a / b) * y1;return gcd;
}

扩展欧几里得算法可以用于求解形如 \(ax \equiv b \pmod{m}\) 的线性同余方程(也包括求解乘法逆元)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/926306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站承建乐山网站公众号建设

前置操作 如果是在 spring-config 中添加 bean 标签来注册内容,每个类都要弄一次就显得麻烦和臃肿了,对于 new 操作而言就没有什么优势了。因此 spring 就引入了注解操作来实现对 Bean 对象的存储。 配置扫描路径 想要将对象成功的存储到 Spring 中&…

网站建设交流发言稿如何建立网站模板

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

题解:AT_agc038_f [AGC038F] Two Permutations

题目: 置换环是显然的,一个环有旋一下和不旋两种状态。 \((P_i=i,Q_i=i,P_i=Q_i)\) 无非这三个限制。\((0,0,0)\):旋一个以上就有贡献。 \((0,0,1)\):旋一个才有贡献。 \((0,1,0)\):旋 P 才有贡献。 \((1,0,0)\):…

完整教程:flink批处理-时间和窗口

完整教程:flink批处理-时间和窗口2025-10-03 20:43 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !impo…

详细介绍:Java基础

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

10.3 考试总结

10.3 考试总结10.3 考试总结 题面下载 得分情况 悲痛爆零 时间分配(大概) 8:30 $ \ $ -- $ \ $T1第一版dp写了出来,大样例没过,开始打dfs 9:20 $ \ $ -- $ \ $T1 dfs好像过了,感觉T3更简单,想去打T3 10:10 --…

国庆集训-JDAY3

国庆集训-JDAY3T1 love思路 暴力枚举 解法 枚举天数,累加即可 归纳总结解题策略 枚举 结果 100pts 时间分配 10minT2 square思路 递推,从\(s_1\)推到\(s_n\) 解法 \(s\)每次变成\(s+n个.+s\) 归纳总结解题策略 递归/…

CSP-S 复赛指南(2025年版)

第一章 数据结构 第一节 线性结构 1.1 【5】双端栈 1.1.1 什么是双端栈? 在理解双端栈之前,我们先回顾一下普通的栈。一个普通的栈,所有元素的插入(入栈,push)和删除(出栈,pop)都只能在同一端——也就是“栈…

AI元人文系列文章:AI元人文的未来——软硬件协同

AI元人文系列文章:AI元人文的未来——软硬件协同 当算法的思考开始关乎人类社会的命运,我们需要为它构建一个既能思考也能自省的数字大脑。 引言:从软件困境到硬件曙光 在AI元人文的探索中,我们构想了一个能够理解…

10.3考试反思

今天得了130/400,问题如下: 1.不应盲目直接开始做t1,应先花10mins把所有题看一遍,确定一下大概题型,判断难易程度。 2.考试时不要浮躁,不要说话,认真做题,发挥自己的最大水平。 3.t1正解->30pts,原因是写哈…

10.2 考试总结

10.2 考试总结$ \Huge 10.2 考试总结$ 得分情况预计得分:20+20+0+0 实际得分:0+4+0+0时间分配(大概)8:20 - 9:10 把所有题都看了一遍,决定先做T1 9:10 - 9:50 打出T1第一版过小样例,去做T2(T1最接近正解的一次…

中建西部建设网站wordpress网站压缩

本文将介绍如何通过EventChannel实现Flutter与原生平台之间的双向通信。如果想了解如何通过MethodChannel实现Flutter调用Android原生平台的方法,可以参考上篇文章。 Flutter如何实现与Android底层平台通信,调用底层Android原生方法https://sgknight.blog.csdn.net/article/…

网站的注册和登录怎么做网站开发公司长春

登陆linux系统之后,使用tab自动补全快捷键的时候显示:cannot create temp file for here-document: No space left on device。 原因:磁盘满了,不能创建临时文件。 解决方法:(逐级查看占用空间过多的目录…

ハレハレヤ

夜の街迷いし秽れの乱歩 以不洁的乱步 迷失于夜晚的街道 何処から来たのよ见窄らしいね 是从何而来的呢 真是潦倒落魄啊 ねぇうちにおいで温めてあげるよ 呐 来我这吧 会给你温暖的 今までよく顽张ったよね 一直以来都…

【愚公系列】《人工智能70年》056-形形色色的机器人(前世今生) - 实践

【愚公系列】《人工智能70年》056-形形色色的机器人(前世今生) - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: …

黑龙江企业网站建设公司宣传片拍摄设备清单

一、概念 1.1 Compose优势 由一个个可以组合的Composable函数拼成界面,方便维护和复用。布局模型不允许多次测量,提升了性能。Compose可以和View互操作(相互包含对方)。 1.2 声明式UI APP展示的数据绝大多数不是静态数据而是会…

4-创建索引和约束 - 实践

4-创建索引和约束 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…

双线网站选服务器我要申请开网店

操作 DDL(Data Definition Language 数据定义语言)用于操作对象和对象的属性,这种对象包括数据库本身,以及数据库对象,像:表、视图等等,DDL 对这些对象和属性的管理和定义具体表现在 create、drop 和 alter 上。 create 可以创建数据库和数据库的一些对象 drop …

Unity 单元测试框架用法 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025十一集训——Day2做题

https://vjudge.net/contest/753101 A. vjudge CF给 a、b、d,求 x 使 \(a or x\) 与 \(b or x\) 是 d 的因数,\(a,b,d<2^{30}\),要求 \(x<2^{60}\)考虑让 \(a or x = x\),\(b or x = x\),使 x 是 d 的倍数即…