裴蜀定理
对于任意整数\(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