数学知识 --- 扩展欧几里得算法

裴蜀定理(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的逆元
posted @ 2020-12-02 09:54  chstor  阅读(312)  评论(0编辑  收藏  举报