扩展欧几里得算法

裴蜀定理

对任何整数 \(a\)\(b\) 关于未知数 \(x\)\(y\) 的线性不定方程(称为裴蜀等式):\(ax+by=c\)

方程有整数解(当且仅当 \(c\)\(gcd(a,b)\) 的倍数),裴蜀等式有解时必然有无穷多个解

\(ax+by=c\) 有解的充要条件为 \(gcd(a,b)|c\)

原方程的解即为\(ax+by=gcd(a,b)\)的解乘上\(\frac{c}{gcd(a,b)}\)

扩欧解出的\(x\)\(ax+by=gcd(a,b)\),中的\(x\),若要求\(ax+by=c\)中的\(x\),两边还要乘上\(\frac{c}{gcd(a,b)}\)

推论:\(a\)\(b\) 互素等价于 \(ax+by=1\) 有解

计算其中整数 \(x\) 和整数 \(y\) 的计算方法被称为扩展欧几里得算法

\(code :\)

int exgcd(int a,int b)
{
	if(!b)
	{
		x=1,y=0;//x,y设为全局变量
		return a;//若为void,此处直接return
	}
	int ans=exgcd(b,a%b),tmp=x;
	x=y,y=tmp-a/b*y;
	return ans;//得到的为gcd(a,b)
}

由欧几里得算法,得

\[ax+by=gcd(a,b)=gcd(b,a\ mod\ b)=bx^\prime+(a\ mod\ b)y^\prime \]

代入,整理得

\[x=y^\prime,\ y=x^\prime-\lfloor\frac{a}{b}\rfloor y^\prime \]

边界情况分析,\(ax^\prime+by^\prime=gcd(a,b)\),当 \(b=0\) 时,\(a\)\(gcd(a,b)\),当且仅当 \(x^\prime=1\)时等式成立,\(y^\prime\) 可以为任意值,为方便起见,设\(y^\prime=0\)

根据上边的式子,即可推出多组解

通解为\(x=x_0+kb,\ y=y_0-ka\ (k∈Z)\)

同余方程

线性同余方程:

\[ax≡b\ (mod\ m) \]

其等价于\(ax-b\)\(m\)的倍数,不妨设为\(-y\)倍,其就改写为

\[ax+my=b \]

根据裴蜀定理得,线性同余方程有解当且仅当\(gcd(a,m)|b\)

有解时,先求出\(ax_0+my_0=gcd(a,m)\),的一组解,\(x_0\)\(y_0\),原线性同余方程的一个解即为\(x=bx_0/gcd(a,m)\)

方程的通解就是所有模 \(m/gcd(a,m)\)\(x\)同余的整数

posted @ 2020-01-22 20:17  lhm_liu  阅读(181)  评论(0编辑  收藏  举报