裴蜀定理(Bezout定理)
- 对于任意整数a,b,存在一对整数x,y,满足ax + by = c (充要条件是:gcd(a,b)整除c)
- 裴蜀定理针对的是两个变量,也可以扩展到多个变量,只需要两两求最大公约数
扩展欧几里得算法
- 裴蜀定理是按欧几里得算法证明的,同时也给出了整数x,y的计算方法,这种计算方法叫做扩展欧几里得算法
代码如下:
int exgcd(int a,int b,int &x,int &y){
if(!b){
x = 1,y = 0;
return a;
}
int d = exgcd(b,a%b,x,y);
int z = x,x = y;
y = z - y * (a / b);
return d;
}
求方程ax + by = c的通解可以表示为
- d = gcd(a,b)为一组特解,可以求得通解为:
求解一次同余方程ax=b(modm)
- ax - b = my, ax = b + my, ax + m(-y) = b
- 有解条件为 gcd(a,m)|b,然后用扩展欧几里得求解即可
- 特别的 当 b=1且 a与m互质时 则所求的x即为a的逆元