记录:扩展欧几里得算法

欧几里得&扩展欧几里得算法及相关的数学证明 //欧几里得算法求最大公约数 int gcd(int m,int n) { int u0=m,u1=n,t; if( u0=u1 u0^=u1,u1^=u0,u0^=u1; while(u0%u1) { t=u1; u1=u0%u1; 阅读详情

本文遵循 CC BY-NC-ND 4.0 协议,作者: U•ェ•*U \texttt{U•ェ•*U} U•ェ•*U,转载请获得作者授权。

前置知识

裴蜀定理/贝祖定理:若 a , b a,b a,b 是整数,且 gcd ⁡ ( a , b ) = d \gcd(a,b)=d gcd(a,b)=d,那么对于任意整数 x , y x,y x,y, a × x + b × y = k a\times x + b\times y = k a×x+b×y=k 中的 k k k 一定是 d d d 的倍数。(特别地,如果 a , b a,b a,b 是整数,那么一定存在整数 x , y x,y x,y 使得 a × x + b × y = gcd ⁡ ( a , b ) a\times x + b\times y = \gcd(a,b) a×x+b×y=gcd(a,b))

引入

引入扩展欧几里得算法,可用于求解以下几种问题:

  • 给定两个非零的整数 a a a 和 b b b,求一组整数解 ( x , y ) (x,y) (x,y) 使得 a × x + b × y = gcd ⁡ ( a , b ) a\times x + b\times y = \gcd(a,b) a×x+b×y=gcd(a,b) 成立,其中 gcd ⁡ ( a , b ) \gcd(a,b) gcd(a,b) 表示 a a a 和 b b b 的最大公约数。
  • 逆元

从欧几里得算法推导:
gcd ⁡ ( x , y ) → gcd ⁡ ( y , x m o d    y ) ⇓ ∀ x n = 1 , y n = 0 ∀ a × x 1 + b × x 1 = gcd ⁡ ⇓ ∀ b × x 2 + ( a m o d    b ) × y 2 = gcd ⁡ ∀ a × x 1 + b × x 1 = b × x 2 + ( a m o d    b ) × y 2 ∀ a × x 1 + b × y 1 = a × y 1 + b × ( x 2 × a b × y 2 ) \gcd(x, y) \to \gcd(y, x \mod y) \\ \Downarrow \\ \forall x_{n} = 1, y_{n} = 0 \\ \\ \forall a\times x_1 + b \times x_1 = \gcd \\ \Downarrow \\ \forall b\times x_2 + (a\mod b)\times y_2 = \gcd \\ \forall a\times x_1 + b \times x_1 = b\times x_2 + (a\mod b)\times y_2 \\ \forall a\times x_1 + b \times y_1 = a\times y_1 + b\times (x_2\times \frac{a}{b}\times y_2) gcd(x,y)→gcd(y,xmody)⇓∀xn​=1,yn​=0∀a×x1​+b×x1​=gcd⇓∀b×x2​+(amodb)×y2​=gcd∀a×x1​+b×x1​=b×x2​+(amodb)×y2​∀a×x1​+b×y1​=a×y1​+b×(x2​×ba​×y2​)

于是反推出原来的值( x 1 , y 1 x_1, y_1 x1​,y1​):

void exgcd(int a, int b, int &x, int &y) {
	if (a % b == 0) x = 0, y = 1;
	else {
		exgcd(b, a % b, y, x);
		y -= a / b * x;
	}
}

证明:
[TODO]

求同余式

对两个整数 a , b a, b a,b,如果它们除以 d d d 的余数相同,则称它们模 d d d 同余,记作 a ≡ b ( m o d    d ) a\equiv b (\mod d) a≡b(modd)。

在同余号两侧同时加、减、乘任意整数,同余式仍成立。

我们设一个同余式 a x ≡ c ( m o d    m ) ax\equiv c (\mod m) ax≡c(modm),那么可以分讨求解:

  • 若 c m o d    gcd ⁡ ( a , m ) ≠ 0 c\mod \gcd(a,m) \neq 0 cmodgcd(a,m)=0,则同余方程 a x ≡ c ( m o d      m ) ax\equiv c(\mod\ m) ax≡c(mod m) 无解。
  • 若 c m o d    gcd ⁡ ( a , m ) = 0 c\mod \gcd(a, m) = 0 cmodgcd(a,m)=0,则同余方程的解为 $x’ = x + \frac{\gcd(a, m)}{m}\times \mathbb{N} $。

求逆元

对任意给定的 x x x 和 p p p,显然 x × x − 1 ≡ 1 ( m o d    p ) x \times x ^ {-1} \equiv 1 (\mod p) x×x−1≡1(modp)。可以利用
这个式子计算 x − 1 x ^ {-1} x−1。

其中 x x x 和 p p p 是已知量,所以上式是一个不定方程, x − 1 x ^ {−1} x−1 和 k k k
是变量。用 exgcd \texttt{exgcd} exgcd 求解可以得到 x − 1 x ^ {−1} x−1。

C++ \texttt{C++} C++ 代码(线性求逆元):

int n, p, inv[3000010];
signed main() {
    cin >> n >> p;
    inv[1] = 1;
    cout << 1 << endl;
    for (int i = 2; i <= n; i ++) {
        inv[i] = (int)(p - p / i) * inv[p % i] % p;
        printf("%lld\n", inv[i]);
    }
    return 0;
}
扩展欧几里得算法详解:从原理到C++实现与实战应用 最大公约数(GCD)是数论与计算机科学中的基础概念,欧几里得算法通过辗转相除高效求解GCD。扩展欧几里得算法(EEA)在此基础上,不仅能计算GCD,还能求出满足贝祖等式 a*x + b*y = gcd(a, b) 的整数系数x和y。这一数学原理在工程实践中具有极高价值,它是求解模线性方程和计算乘法逆元的通用核心方法,广泛应用于密码学(如RSA密钥生成)、竞赛编程和算法设计等领域。本文以C++为例,深入剖析EEA的递归与迭代实现,并探讨其在处理模运算、线性同余方程等场景中的具体应用与常见陷阱。 阅读详情

相关推荐

嵌入式调光控制库:轻量级软启/渐变/记忆逻辑实现

调光控制是智能照明系统的核心基础功能,涉及亮度调节、人机交互与电气安全多重需求。其底层原理依赖于对相位角或PWM占空比的精确时序控制,并需融合软启动、渐变过渡、状态记忆等工程化逻辑。这类轻量级调光行为逻辑层,不直接操作硬件寄存器,而是以确定性、无动态内存、可配置的方式封装用户意图到目标亮度值(0–100%)的映射过程,显著提升产品鲁棒性与跨平台复用能力。广泛应用于TRIAC交流调光、LED直流PWM驱动及DALI/Matter等智能照明协议网关中,尤其适合资源受限的Cortex-M系列MCU和FreeRTO

weixin_28949937的博客 579

The 9th SWJTU Collegiate Programming Contest Qualification Round

从八点起来做了一个上午,两道题没做出来,后面也没研究,比赛结束之后rank滑到了第九。简单写一下解题报告吧。 Problem A A+B 没啥说的.. #include int main() { int a,b; while(scanf("%d%d",&a,&b)!=EOF) { printf("%d\n",a+b); } return 0; } Proble

210

Twincat Scopeview录波中的Ringbuffer设置技巧与常见问题解决

本文深入解析了倍福Twincat Scopeview录波功能中Ringbuffer(环形缓冲区)的核心设置技巧与常见问题解决方案。针对数据丢失、触发时机不准等痛点,详细阐述了缓冲区大小、预触发样本、采样率等关键参数的优化配置,并提供了多通道同步、自动诊断等实战应用指南,帮助工程师高效捕捉和分析PLC数据。

rainy的博客 846

2016 [Offer收割]编程练习赛3

2016 Offer收割3

acmer的随记 777

会计引擎:交易与核算分离的前世今生

一、为什么需要会计引擎 金融产品的设计,一如一块硬币需要兼顾两面:一面是为客户提供好的金融服务,满足客户支付结算、借贷、资产保值增值等方面的需求,并在这个过程中,以数字化的方式做好客户资产的登记,登记的载体,则是“分户”或“台账”,如客户存款户,是一种典型的分户--资金的增减变化都在一个账户中进行体现,而客户购买的银行理财,因为收益率、期限、投资标的不同,每一笔持有就形成一行记录,即为“台账”--这当然是不严谨但相对形象的表述。但是,“分户”和“台账”并没有必然的区别,以贷款为例,一些银行仍然存在所谓“

银行信息系统应用架构详解 985

探秘RK3588:OverlayFS挂载与固件升级全攻略

本文围绕RK3588芯片的OverlayFS文件系统挂载与固件升级技术展开详细阐述。首先介绍了RK3588芯片的卓越性能及其在嵌入式领域的广泛应用,重点分析了OverlayFS文件系统的分层架构原理及其在RK3588设备上的挂载方法,包括详细的挂载步骤、常见问题解决方案。随后详细阐述了RK3588设备在Windows和Linux环境下的固件升级方案,涵盖升级准备、具体操作流程及故障处理等内容。最后通过智能安防监控设备的实际案例,展示了OverlayFS挂载与固件升级技术的应用效果。文章为嵌入式开发者提供了全

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 286

欧几里得算法、扩展欧几里得算法(特解、应用、通解)

gcdabgcdbabgcdabgcdbabgcdbabgcdabgcdaba​gcdabb​最近实验中用到了仿射加解密算法,其中的解密操作是通过扩展欧几里得算法实现的,因此在这里对做一个完整的记录。

striveAgain丶的博客 1988

快手NS sig3签名算法(2025年1月)

快手NS sig3签名算法(2025年1月)

sh_moranliunian的博客 3678

扩展欧几里得算法

欧几里得算法 欧几里得算法又称为辗转相除法,是用来计算两个非负整数a,b的最大公约数的。 实现方式也非常简单 C++ int gcd(int a, int b) { if (b) return gcd(b, a % b); return a; } 扩展欧几里得算法 顾名思义,扩展欧几里得算法就是欧几里得算法的扩展版 扩展欧几里得算法是用来解决一个很简单的问题。 对于一对正整数a, b求出一组x, y满足 ai∗xi+bi∗yi=gcd(ai,bi) a_i * x_i + b_i * y_

Darkgreen的博客 972

【即插即用模块】注意力篇 | TGRS 2025 | ASD:自适应频域解耦,动态拆分高低频+空间注意力,频域空间特征双增强!

摘要: FDMF-Net提出了一种频域解耦多模态融合网络,核心组件为振幅谱解耦模块(ASD)。ASD通过自适应频域拆分和频域-空域协同增强,有效分离模态不变与模态特定特征。该模块利用MLP学习动态阈值调整高低频比例,并通过空间注意力分别强化频域特征,在遥感语义分割任务中实现了细节与结构的协同增强。实验表明,ASD模块能减少模态内冗余,提升特征判别性,为多模态数据融合提供了新思路。代码已开源,适用于需要强化细节与结构的视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 310

60、新型共轴直升机建模与事件触发积分强化学习研究

本文研究了新型共轴直升机的动力学建模与控制方法,基于牛顿-欧拉方程建立了6自由度非线性模型,并设计了四通道闭环控制器实现稳定飞行。同时,提出一种事件触发积分强化学习方法,用于解决非零和博弈中的最优跟踪控制问题,在减少通信开销的同时保证系统性能。通过仿真验证了控制器的轨迹跟踪能力,并证明了算法下跟踪误差与神经网络权重估计误差的一致最终有界性。两种方法协同可提升飞行器的自主性与鲁棒性,未来可拓展至多智能体协作、智能交通等复杂系统应用。

rl6adventurer的博客 118

欧几里得与扩展欧几里得算法(含推导过程及代码)

在学习Acwing c++蓝桥杯辅导课第八讲数论-AcWing 1299. 五指山时有使用到扩展欧几里得算法,这里来记录下知识点。博客目录索引(持续更新)

每个人都是独一无二的,把握好自己的节奏,跟着自己的心走。 2465

从 SM30 到 Fiori:在 SAP BTP ABAP Environment 里创建 Business Configuration 配置维护对象的完整路径

摘要 在SAP BTP的ABAP环境中,传统SAP GUI和SM30配置方式被Business Configuration (BC)替代。BC通过Fiori应用维护配置,支持传输和权限控制。配置表需满足可维护性条件,如允许数据维护、包含技术字段等。通过ADT生成Maintenance Object和Transport Object,实现配置发布与治理。权限管理需创建IAM App和Business Catalog,确保配置可维护。BC在云端延续了可控、可追溯、可发布的治理原则。 (字数:150)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 242

扩展欧几里得算法及其应用

由于数论的板子真的很抽象,也很难背,所以特此记录扩展欧几里得算法的板子和它的用途本篇文章只涉及应用,不涉及证明,如需理解证明还请各位移步其他优秀的讲解!

KS的博客 1180

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【算法小结】扩展欧几里得

“ Ctrl AC!一起 AC!” 声明:本博客主要记录结论,证明较少,需要证明自行转往扩展欧几里得算法 目录 1.基本的扩展欧几里得算法 2.ax+by=c的求解 3.同余式(mod m)的求解 4.逆元的求解以及(b/a)%m的计算 1.基本的扩展欧几里得算法 扩展欧几里得算法用来解决这样一个问题:给定两个非零整数a和b,求一组整数解(x,y), 使得ax+by=gcd(a,b)。 int exGcd(int a,int b,int &x,int &y){.

Ctrl AC的博客 441

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

数论学习--扩展欧几里得

欧几里得算法大家应该都知道,就是用来求解两个数得最大公因数得算法,即gcd(a,b),利用辗转相除得到结果。而最小公倍数也是在最大公因数得基础上进行求解得。

m0_74707185的博客 956

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LeetcCode困难题——奇妙序列扩展欧几里得算法解法

也是为了符合题目要求,先考虑初步的思路,目前只考虑在data数组中已元素且在此之前还没有进行任何addAll和multAll操作的情况,此时再开始进行加与乘操作,如果想在。,因此相较于费马小定理的快速幂,可以更快的得出逆元,本题在append函数实现求逆操作并整合到data中,并且在getIndex中获取。,这里的t就是本题要求的逆元,同样采用递推的思路来减少时间和空间开销,为了实现递推,可以设。,会无法通过本题,对于值溢出的情况,需要在每次涉及到运算的地方取模。

qq_56558214的博客 1141

欧几里得算法与扩展欧几里得算法——公钥密码的数学基础

本文主要讲解欧几里得算法与扩展欧几里得算法这两个公钥密码的数学基础,通过上手计算、代码总结和数学证明三个方面细致描写这两个基本的数学定理,可以解答部分同学对密码学的部分疑惑

weixin_47383889的博客 898

【简单数论】欧拉函数、快速幂、扩展欧几里得算法

本文介绍欧拉函数、快速幂以及扩展欧几里得算法

qq_73176808的博客 531

RSA算法实现密文加密(字符型密文,ASCII码转换,扩展欧几里得算法)

【代码】RSA算法实现密文加密(字符型密文,ASCII码转换,扩展欧几里得算法)

weixin_72223644的博客 1497

初等数论--扩展欧几里得详解

初等数论--扩展欧几里得详解(递归、迭代)

bdn_nbd的博客 925

算法基础学习笔记——⑭欧拉函数\快速幂\扩展欧几里得算法\中国剩余定理

算法基础学习笔记——⑭欧拉函数\快速幂\扩展欧几里得算法\中国剩余定理

VLOKL的博客 1486

AcWing 877.扩展欧几里得算法(裴蜀定理 + 扩展欧几里得)

原理 + 推导 用来解决这类问题 值得注意的是 xy的值多次改变并且需要记录输出,C++中直接引用就好,Java通过数组即可。 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; class Main {...

SoKeeGan 383
上一篇: 题解:AT_joig2022_f タクシー 2 (Taxis 2)
Chat_lsm2024
博客等级 码龄7年 903粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值