exgcd

扩展欧几里得算法(Extended Euclidean algorithm, EXGCD),常用于求 \(ax+by=\gcd(a,b)\) 的一组可行解。

部分选自OI Wiki

扩展欧几里得算法

欧几里得算法 的扩展。

扩展欧几里得算法证明

很简单,我们一步一步来(我们定义 \(a\geq b\)):

根据 欧几里得算法 得到 \(\gcd(a,b)=\gcd(b,a\mod b)\) ,所以 \(a \times x_1 + b \times y_1 = b \times x_2 + (a \mod b) \times y_2\) 。

因为 \(a \mod b = a-\lfloor\frac{a}{b}\rfloor \times b\) (这一点很容易理解)

所以 \(a \times x_1 + b \times y_1 = b \times x_2 + (a-\lfloor\frac{a}{b}\rfloor \times b) \times y_2\) 。

把 \(b \times x_2 + (a-\lfloor\frac{a}{b}\rfloor \times b) \times y_2\) 化简得 \(b \times x_2 + a \times y_2-\lfloor\frac{a}{b}\rfloor \times b \times y_2\) 。

再整理一下得 \(a \times y_2 + b \times (x_2 -\lfloor\frac{a}{b}\rfloor \times y_2)\)

和 \(a \times x_1 + b \times y_1\) 一一对应得到:

\[\begin{cases}
a \times x_1 + b \times y_1 \\
a \times y_2 + b \times (x_2 -\lfloor\frac{a}{b}\rfloor \times y_2)
\end{cases}
\]

\[\begin{cases}
x_1 = y_1 \\
y_1 = x_2 -\lfloor\frac{a}{b}\rfloor \times y_2
\end{cases}
\]

欸,这样不就可以通过递归算出了吗?(可以自己手算一下)

扩展欧几里得算法边界

我们的 扩展欧几里得算法 总需要一个边界,所以我们规定了当 \(b=0\) 时(在 欧几里得算法 中我们也是以b=0为边界,具体可看那篇文章),我们的 \(a \times 1 + b \times 0 = a = \gcd(a,b)\) ,所以当 b=0 时

\[\begin{cases}
x = 1 \\
y = 0
\end{cases}
\]

扩展欧几里得算法代码

template<typename T>
void exgcd(T a,T b,T &x,T &y){
if(b==0){
x=1,y=0;
return;
}
exgcd(b,a%b,y,x); // 注意x,y的顺序
// 计算x,y
y-=a/b*x;
}

例题

青蛙的约会


求逆元

(upd:20230816)

老是会忘,记一下

逆元的定义:

\[ab=1(\mod P)
\]
\[\Downarrow
\]
\[ab=1+y\cdot P
\]
\[\Downarrow
\]
\[ab-yP=1
\]

我们是不是可以用exgcd求 b 了

exgcd|扩展欧几里得算法|扩展欧几里得算法证明|exgcd求逆元 一文说明白的更多相关文章

  1. noip知识点总结之--欧几里得算法和扩展欧几里得算法

    一.欧几里得算法 名字非常高大上的不一定难,比如欧几里得算法...其实就是求两个正整数a, b的最大公约数(即gcd),亦称辗转相除法 需要先知道一个定理: gcd(a, b) = gcd(b, a  ...

  2. Web 站点的水平扩展和垂直扩展 (译文)

    当一个开发人员提升计算机系统负荷时,通常会考虑两种方式垂直扩展和水平扩展.选 用哪种策略主要依赖于要解决的问题以及系统资源的限制.在这篇文章中我们将讲述这两种策略并讨论每种策越的优缺点.如果你已经有一 ...

  3. hdu_1576A/B(扩展欧几里得求逆元)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1576 A/B Time Limit: 1000/1000 MS (Java/Others)    Me ...

  4. gcd模板(欧几里得与扩展欧几里得、拓展欧几里得求逆元)

    gcd(欧几里得算法辗转相除法): gcd ( a , b )= d : 即 d = gcd ( a , b ) = gcd ( b , a mod b ):以此式进行递归即可. 之前一直愚蠢地以为辗 ...

  5. es6之函数扩展与对象扩展

    一.函数扩展 1.参数默认值 参数有默认值,后面不可以再加没有默认值的变量.如以下test函数中,不可以加写成 function test(x,y="word",z){ } fun ...

  6. Abaqus 子模型法 和 子结构法

    目录 1 子模型法 1.2 子模型法应用考虑因素 1.3 子模型法关键技术 1.3.1 单元选择 1.3.2 驱动变量 1.3.3 链接整体模型和子模型 1.4 仿真过程 1.4.1 问题描述 1.4 ...

  7. 在 Windows Azure 网站中进行纵向扩展和横向扩展

    编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Byron Tardif 撰写. 当您开始一个新的 Web 项目,或者刚刚开始开发一般的网站和应用程序时,您可能希望从小处着手. ...

  8. 扩展gcd求逆元

    当模数为素数时可以用费马小定理求逆元. 模数为合数时,费马小定理大部分情况下失效,此时,只有与模数互质的数才有逆元(满足费马小定理的合数叫伪素数,讨论这个问题就需要新开一个博客了). (对于一个数n, ...

  9. CF451E Devu and Flowers (隔板法 容斥原理 Lucas定理 求逆元)

    Codeforces Round #258 (Div. 2) Devu and Flowers E. Devu and Flowers time limit per test 4 seconds me ...

  10. 理解水平扩展和垂直扩展 (转载 http://yunjiechao-163-com.iteye.com/blog/2126981)

      当一个开发人员提升计算机系统负荷时,通常会考虑两种方式垂直扩展和水平扩展.选用哪种策略主要依赖于要解决的问题 以及系统资源的限制.在这篇文章中我们将讲述这两种策略并讨论每种策越的优缺点.如果你已经 ...

随机推荐

  1. AcWing 第87场周赛题解

    T1 移动棋子 算出数值为 \(1\) 的点离 \((3, 3)\) 的距离即可. #include <iostream> #include <cstring> #includ ...

  2. 2023年icpc大学生程序设计竞赛-nhr

    icpc的省赛是在洛阳举办,第一次出省,还是两天,第一次离开郑州去别的城市比赛,心情更多的是激动,非常感谢老师给了这次机会,第一天20号,打完热身赛之后回寝室,和队友一起看了一下去年省赛的题,感觉还是 ...

  3. Linux0.11内核笔记(-)

    基础知识 C语言.汇编知识.嵌入式汇编.x86处理器和编程的相关知识和.UNIX操作系统设计 Linus在最初开发Linux操作系统时参考了MINIX操作系统:<操作系统:设计与实现>一种 ...

  4. salesforce零基础学习(一百二十九)Lead Convertion 有趣的经历

    本篇参考:https://help.salesforce.com/s/articleView?id=000382564&type=1 Lead Convertion 是salesforce中s ...

  5. 关于quartus II的导入以前的工程,QSF文件出现的错误的解决方案。

    在有时候打开以前的工程,或者别人做好的例程会遇到一些报错信息.具体报错信息如下: 报错信息语句行: 在文件QSF文件中有几行出错,显示错误读取,即不能打开工程.打开文件发现该几行的PIN 使能信号处于 ...

  6. pandas 利用openpyxl设置表格样式

    writer = pd.ExcelWriter('/home/leo/Desktop/项目测试/922904.xlsx', engine='openpyxl') new_data.to_excel(w ...

  7. 园子的商业化努力-阿里云开发者社区合作:RDS MySQL Serverless 免费试用活动

    阿里云开发者社区这个月组织了一个针对"云数据库 RDS MySQL Serverless 版"免费试用用户的做任务活动,上周找园子合作,希望能在园子里推广一下这个活动. 由于时间太 ...

  8. 用 Tensorflow.js 做了一个动漫分类的功能(二)

    前言: 前面已经通过采集拿到了图片,并且也手动对图片做了标注.接下来就要通过 Tensorflow.js 基于 mobileNet 训练模型,最后就可以实现在采集中对图片进行自动分类了. 这种功能在应 ...

  9. AI绘画:StableDiffusion制作AI赛博机车图保姆级教程

    本教程收集于:AIGC从入门到精通教程汇总 如果你具备Stable Diffusion的基础知识,那制作AI赛博机车图会更为顺畅.即便没有这个基础,只要严格按照教程的步骤执行,也能成功制作出来. 本教 ...

  10. VOLTE:MIUI14无5G信号、通话质量差、短信收不到的原因之一

    在最近一次miui版本更新后的一段时间里,先后出现以下一些情况: 1. 在"双卡与移动网络"设置中,无论如何折腾"5G网络"开关或者"5G网络模式选择 ...