首页 > 编程语言 >扩展欧几里得算法

扩展欧几里得算法

时间:2022-09-05 13:12:14浏览次数:99  
标签:gcd cdot 欧几里得 扩展 int 算法 therefore ax mod

引入: 欧几里得算法

欧几里得算法其实就是辗转相除法,用来求2个数的最大公因数。

复杂度:\(O(\log n)\)

\(code\)

int gcd(int a, int b) {return !b ? a : gcd(b, a % b);}

裴蜀定理

对于任意正整数\(a ,b\) ,一定存在非零整数\(x ,y\) ,使得

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

扩展欧几里得算法

令 \(d=\gcd(a,b)=\gcd(b ,a\) mod \(b)\)。

现有\(ax+by=bx'+(a\) mod \(b) \cdot y'=d\),求解\(x,y\)。

\(\because\) \(bx'+(a\) mod \(b) \cdot y'=d\)

\(\therefore\) \(bx'+(a-\) \(\lfloor \frac{a}{b} \rfloor \cdot b\) \() \cdot y'=d\)

\(\therefore\) \(ay' + b \cdot (x'-\) \(\lfloor \frac{a}{b} \rfloor \cdot y'\) \()=d\)

\(\therefore\)\(\begin{cases} x = y'\\ y = x'-\lfloor \frac{a}{b} \rfloor \cdot y' \end{cases}\)

当 \(b = 0\) 时:

\[ax = \gcd (a, 0) = a \]

\[x = 1 \]

复杂度:\(O(\log n)\)

\(code\)

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

模板题

稍微转化一下

\(\because\) \(ax\) mod \(b=1\)

\(by\) mod \(b=0\)

\(\therefore\) \((ax+by)\) mod \(b=1\)

注意要求的是最小正整数解,所以处理一下\(x\)

x = (x + b) % b;

标签:gcd,cdot,欧几里得,扩展,int,算法,therefore,ax,mod
From: https://www.cnblogs.com/Lien-/p/16657745.html

相关文章

  • Markdown 扩展语法
    Markdown扩展语法YarnNote编辑器标签页(markdown-it)::::group分组名称:::group-itemTab1test1::::::group-item*Tab2test2::::::group-itemTab3......
  • 参加了个算法比赛,真是一言难尽啊
    hello大家好呀,我是小楼。上周参加了一个区的程序员技能比赛的初赛,其实就是算法比赛,虽然最后结果是过了初赛,但过程真是一言难尽啊。这次的算法比赛和ACM非常类似,虽然我大......
  • 数据结构与算法学习笔记———链表(Linked List)
    链表(LinkedList)#该篇笔记转自【Python】python链表_小周ipython的博客-CSDN博客_python链表简介链表(LinkedList):是一种线性表数据结构。他是用一组任意的存储单元(可......
  • 空间点索引算法-GeoHash
    介绍GeoHash是一种空间地址编码方法,能够把二维的空间经纬度数据编码成一个字符串。一个字符串代表某一矩形区域,矩形区域内所有的点都共享相同的GeoHash字符串。相当于给......
  • 【iOS逆向】某营业厅算法分析
    阅读此文档的过程中遇到任何问题,请关注公众号【移动端Android和iOS开发技术分享】或加QQ群【812546729】1.目标使用fridastalker分析某营业厅的签名算法。2.操作环境......
  • MPI学习笔记(四):矩阵相乘的Cannon卡农算法
    mpi矩阵乘法:C=αAB+βC一、Cannon卡农算法基本介绍1、二维矩阵串行乘法两个n维方阵的乘法A×B=C的串行计算公式为:下图是用图示来表示的这种计算规则:2、二维块划分的......
  • LightGBM 算法概述
    LightGBM算法概述简要解释LightGBMLightGBM(LightGradientBoostingMachine)是一个开源的机器学习算法。它是基于决策树的算法,使用梯度提升来集成树。您可以在GitHu......
  • NOIP复习(二)二分算法
    提供一种二分写法,不太用考虑边界的问题。intl=st,r=ed,ans=ed+1;while(l<=r){intmid=(l+r)>>1;if(check(mid))ans=mid,l=mid+......
  • 数据结构预算法学习笔记 —— 双端队列(Deque)
    双端队列(Deque)1.简介双端队列是一种有次序的数据集。和队列相似,其两端也可以称作为”首“”尾“段,但deque中数据项既可以从队首加入,也可以从队尾加入。同样,数据项也可以......
  • 迪杰斯特拉算法
    1.应用场景-最短路径问题看一个应用场景和问题:1)战争时期,胜利乡有7个村庄(A,B,C,D,E,F,G),现在有六个邮差,从G点出发,需要分别把邮件分别送到A,B,C,D,E,F六......