首页 > 其他分享 >exgcd

exgcd

时间:2024-07-20 15:19:09浏览次数:13  
标签:方程 frac gcd int exgcd ax mod

裴蜀定理

对于任意整数\(a,b\)都存在整数\(x,y\),使得\(ax+by=gcd(a,b)\)

扩展欧几里得算法(exgcd)

设整数\(a,b,x,y\)满足\(ax+by=gcd(a,b)\)

若\(b=0\),则\(x=1\),\(y\)取任意整数

若\(b>0\)

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

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

\[=bx_0+(a \ mod \ b)y_0 \]

\[= bx_0+(a-\left \lfloor \frac{a}{b} \right \rfloor b )y_0 \]

\[= ay_0 + b(x_0-\left \lfloor \frac{a}{b} \right \rfloor y_0 ) \]

所以\(x=y_0 , y=x_0-\left \lfloor \frac{a}{b} \right \rfloor y_0\)

于是可以仿照辗转相除法,进行递归求解

代码

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

二元一次不定方程

求不定方程\(ax+by=c\)的解,其中\(a,b,c\)是正整数

当\(c \ mod \ gcd(a,b) \ne 0\)时,方程无整数解

当\(c \ mod \ gcd(a,b) =0\)时,我们可以先求出\(ax+by=gcd(a,b)\)的一组解\(x_0,y_0\)

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

方程两边同时乘上\(\frac{c}{d}\),就能得到原方程,所以我们可以得到原方程的一组特解为\(x_1=\frac{x_0c}{d},y_1=\frac{y_0c}{d}\)

对于任意$k \in \mathbb{Q} \(,显然有\)a(x+kb)+b(y-ka) =c$

于是我们可以得到方程的通解为

\[x=x_1+kb \]

\[y=y_1+ka \]

以为我们需要保证\(x,y\)是整数,即保证\(ka,kb\)是整数,所以\(k\)的最小值为\(\frac{1}{d}\)

又因为\(ka,kb\)显然是\(\frac{a}{d},\frac{b}{d}\)的倍数,所以设\(s \in \mathbb{Z}\),方程的通解为

\[x=x_1+\frac{sb}{d} \]

\[y=y_1-\frac{sa}{d} \]

同余方程

给定形如\(ax \equiv b \ (mod \ m)\)的方程,求方程的解

将原同余方程变为二元一次方程

\(ax+ym=b\)

按照上面二元一次不定方程的解法,即可得到同余方程的解

标签:方程,frac,gcd,int,exgcd,ax,mod
From: https://www.cnblogs.com/RYANGSJ/p/18313164

相关文章

  • 扩展欧几里得算法(exGcd)
    扩展欧几里得算法(ExtendedEuclideanalgorithm,EXGCD),常用于求\(ax+by=c\)的一组可行解。过程设\(ax_1+by_1=\gcd(a,b)\)\(bx_2+(a\modb)y_2=gcd(b,a\modb)\)由欧几里得算法:\(\gcd(a,b)=gcd(b,a\modb)\)所以:\(ax_1+by_1=bx_2+(a\modb)y_2\)又因为:\(a\mod......
  • exgcd 通解(新)
    可能不全,老文章在这什么是通解,我们知道二元一次方程,是如果只有一个式子,那么解会有无数个,而通解就是指让我们只找到一个解就可以推出其他所有解的式子。注意以下变量都为整数。知道了定义下面就是推式子了,首先设\(x,y\)是\(ax+by=\gcd(a,b)\)的一个解,那么有\[y=\le......
  • [题解]P5656 【模板】二元一次不定方程 (exgcd)
    P5656【模板】二元一次不定方程(exgcd)若存在\(ax+by=c\),则可以根据特解\(x,y\)求出任意通解\(x',y'\):\(\begin{cases}x'=x+k*\frac{b}{\gcd(a,b)}\\y'=y-k*\frac{a}{\gcd(a,b)}\end{cases}(k\in\mathbb{Z})\)求特解的方法是「扩展欧几里得(exgcd)」,如果没接触过可以先阅读......
  • 扩展欧几里得(exgcd)通解及其证明
    exgcd求ax+by=gcd(a,b)中x和y的通解(下面简称通解)什么是通解我们知道二元一次方程,是如果只有一个式子,那么解会有无数个而通解就是指让我们只找到一个解就可以推出其他所有解的式子(注意本证明极其复杂,请直接背模版或感性理解)知道了定义下面就是推式子了首先......
  • P5656 【模版】二元一次不定方程(exgcd)
    综合考查exgcd功力的题目。没有整数解当且仅当\(\gcd(a,b)\nmidc\),直接输出-1。用exgcd解方程\(ax+by=\gcd(a,b)\)得到一组特解\(x_0,y_0\)。对原方程变形得到\(a\cdot\dfrac{xc}{\gcd(a,b)}+b\cdot\dfrac{yc}{\gcd(a,b)}=c\),于是有\(ax+by=c\)的一组特解\(x_1=\d......
  • gcd & exgcd
    gcd&exgcdgcd设\(a=bk+c\),显然有\(c=a\bmodb\)。设\(d\mida,~d\midb\),则\(c=a-bk,\frac{c}{d}=\frac{a}{d}-\frac{b}{d}k\)。由右边的式子可知\(\frac{c}{d}\)为整数,即\(d\midc\),所以对于\(a,b\)的公约数,它也会是\(b,a\bmodb\)的公约数。反过来也需要证......
  • exgcd+乘法逆元相关笔记
    #include<iostream>#include<cstdio>usingnamespacestd;constintpass=0;//exgcd://求解二元一次不定方程//ax+by=(a,b)=(b,a%b)=bx'+(a%b)*y'=bx'+(a-b*(a/b))*y'=b*(x'-(a/b)*y')+ay'//则有y=(x'-(a/b)*y'),x=y'......
  • exgcd 学习笔记
    定义又名扩展欧几里得算法(辗转相除法)是用来求\(ax+by=gcd(a,b)\)中未知数的算法算法证明拿到一组\(a,b\),设\(G=gcd(a,b)\)目标:求出满足\(ax+by=G(1)\)的\(x\)与\(y\)如果已知一组\(x2,y2\),满足\(bx2+\)\((a\)\(mod\)\(b)y2=G(2)\)此时结合\((1)(2)\)得\(a......
  • GYM104090A Modulo Ruins the Legend - exgcd -
    题目链接:https://codeforces.com/gym/104090/problem/A题解:转化一下发现只需要求满足下式的解:\[ns+\dfrac{n\times(n+1)}{2}d\equivC(\bmodm)\]设\(a=n,b=\dfrac{n(n+1)}{2},p=gcd(a,b)\)即找到一组\((s',d',t')\)使得\(as'+bd'+mt'=C\)考虑\(a......
  • 关于exgcd的总结
    关于exgcd的总结我们主要讨论的是\(ax+by=c\)1.exgcd算法1.1关于解的存在性有裴蜀定理知,对于方程\(ax+by=c\)存在解的充分必要条件是:\((a,b)|c\)tips:裴蜀定理如果\(a,b\)均为整数,则有整数\(x,y\)使得\(ax+by=\gcd(a,b)\),这个等式称为裴蜀等式。1.2exgcd算法介绍要求\(a......