裴蜀定理
对任何整数 (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-lfloorfrac{a}{b}
floor 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)同余的整数