exgcd

裴蜀定理

对于任意整数\(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\)

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

posted @ 2024-07-20 15:12  RYANGSJ  阅读(3)  评论(0编辑  收藏  举报