在讲解扩展欧几里得之前我们先回顾下辗转相除法: \(gcd(a,b)=gcd(b,a\%b)\)当a%b==0的时候b即为所求最大公约数 好了切入正题: 简单地来说exgcd函数求解的是\(ax+by=gcd(a,b)\)的最小正整数解.根据数论的相关知识,一定存在一组解\(x,y\)使得\(ax+by=gcd(a,b)\).那就来谈谈具体如何来求解吧. 根据辗转相除法的内容\(gcd(a,b)=gcd(b,a\%b)\)我们可以得到:\[ax_1+by_1=gcd(a,b)=gcd(b,a\%…
@(学习笔记)[扩展欧几里得] 本以为自己学过一次的知识不会那么容易忘记, 但事实证明, 两个星期后的我就已经不会做扩展欧几里得了...所以还是写一下学习笔记吧 问题概述 求解: \[ax + by = (a, b)\] Hint: \((a, b)\)表示\(gcd(a, b)\) 分析解决 根据欧几里得算法(辗转相除法), \[(a, b) = (b, a \% b)\] 所以有\[ax + by = (a, b) = (b, a \% b) = bx' + (a \% b)y'\] 故我们…
哎呀大水题..我写了一个多小时..好没救啊.. 数论板子X合一? 注意: 本文中变量名称区分大小写. 题意: 给一个\(n\)阶递推序列\(f_k=\prod^{n}_{i=1} f_{k-i}b_i\mod P\)其中\(P=998244353\), 输入\(b_1,b_2,...,b_n\)以及已知\(f_1,f_2,...,f_{n-1}=1\), 再给定一个数\(m\)和第\(m\)项的值\(f_m\), 求出一个合法的\(f_n\)值使得按照这个值递推出来的序列满足第\(m\)项的值为…
[题意]给定a,b,c,在天平左边放置若干重量a的砝码,在天平右边放置若干重量b的砝码,使得天平两端砝码差为c.设放置x个A砝码和y个B砝码,求x+y的最小值. [算法]数论(扩展欧几里德算法) [题解]问题转化为求满足方程ax+by=c,|x|+|y|的最小值. 先用扩展欧几里得算法求得通解. 由原方程得答案分布在y=-a/b*x+c/b(a>0,b>0,c>0),因此是k<0,b>0的直线. 由于斜率一定,min{|x|+|y|}一定出现在x轴两侧或y轴两侧,取这四个点判…
0.前言 相信大家对于欧几里得算法都已经很熟悉了.再学习数论的过程中,我们会用到扩展欧几里得算法(exgcd),大家一定也了解过.这是本蒟蒻在学习扩展欧几里得算法过程中的思考与探索过程. 1.Bézout定理 扩展欧几里得算法利用归纳法,证明了Bézout定理. Bézout定理:对于任意整数 \(a\),\(b\) ,存在一对整数 \(x\),\(y\),满足 \(ax+by=gcd(a,b)\) 在扩展欧几里得的算法中,我们求出 \(x\),\(y\) 的值. 2.证明 2.1 \(gcd\…
欧几里得算法: 1.定义:gcd的意思是最大公约数,通常用扩展欧几里得算法求 原理:gcd(a, b)=gcd(b, a%b) 2.证明: 令d=gcd(a, b)  =>  a=m*d,b=n*d 则m*d=t*n*d+a%b  =>  a%b=d*(m-t*n) gcd(b, a%b)=gcd(n*d, (m-t*n)*d) 令gcd(n, m-t*n)=e  =>  n=x*e,m-t*n=y*e 则m-x*e*n=y*e  =>  m=e*(x*n+y) 由gcd(n, m…
一.前言 本博客适合已经学会欧几里得算法的人食用~~~ 二.扩展欧几里得算法 为了更好的理解扩展欧几里得算法,首先你要知道一个叫做贝祖定理的玄学定理: 即如果a.b是整数,那么一定存在整数x.y使得$ax+by=gcd(a,b)$. 通俗的说就是:如果$ax+by=c$有解,那么$c\%gcd(a,b)=0$ 扩展欧几里得算法就是来求解$ax+by=c$这个方程的(判断有无解仅需使用欧几里得算法即可). 我们不妨从递归到底的情况来入手. 当$b==0$时,显然有: $\begin{cases}x…
1009:数论 扩展欧几里得算法 其实自己对扩展欧几里得算法一直很不熟悉...应该是因为之前不太理解的缘故吧这次再次思考,回看了某位大神的推导以及某位大神的模板应该算是有所领悟了 首先根据题意:L1=x+mt; L2=y+nt; 可知当两人相遇: L1-L2=k*l; 即 :(m-n)t-(y-x)=kL 根据整除取余的方法:[ a/b=c...d --> a-d=c*b;] 可得到:(m-n)t mod l=y-x; 得到线性同余方程 此方程有解当且仅当 y-x 能被 m-n 和l的最大公约数…
Euclid算法(gcd) 在学习扩展欧几里得算法之前,当然要复习一下欧几里得算法啦. 众所周知,欧几里得算法又称gcd算法,辗转相除法,可以在\(O(log_2b)\)时间内求解\((a,b)\)(a,b的最大公约数). 其核心内容可以陈述为:\((a,b)=(b,a\%b)\),然后反复迭代该式缩小\(a,b\)规模,直到\(b=0\),得到a为最大公约数. 证明 设两数为\(a\ b(b<a)\),求它们最大公约数的步骤如下:用\(b\)除\(a\),即\(a/b=q-..r\),得\(a…
浅谈扩展欧几里得(扩展GCD)算法 本篇随笔讲解信息学奥林匹克竞赛中数论部分的扩展欧几里得算法.为了更好的阅读本篇随笔,读者最好拥有不低于初中二年级(这是经过慎重考虑所评定的等级)的数学素养.并且已经学会了学习这个算法的前置知识:欧几里得算法. 对于对欧几里得算法还有知识模糊的读者,请不要担心,这里为你准备了前导知识讲解,请移步至本蒟蒻的另两篇博客: 浅谈GCD 求最大公约数的方式 裴蜀定理 裴蜀定理的概念及证明 因为翻译版本的不同,这个定理可能还会被叫做贝祖定理.\(B\acute{e}zou…