欧几里得算法

欧几里得辗转相除法

int gcd(int a, int b){return b? gcd(b, a % b) : a;}

扩展欧几里得算法

递归:

int exgcd(int a, int b, int &x, int &y){
	if (b == 0){x = 1, y = 0;return a;}
	int res = exgcd(b, a % b, x, y);
	int X = x;x = y;y = X - a / b * y;return res;
}

非递归:

int exgcd(int a, int b, int &x1, int &x2){
	x1 = 1, x2 = 0; int x3 = 0, x4 = 1;
	while (b){int c = a / b;tie(x1, x2, x3, x4, a, b) = make_tuple(x3, x4, x1 - x3 * c, x2 - x4 * c, b, a - b * c);}
	return a;
}

参考

  1. \(\text{12.11 math1.pdf \; \;by Tx\_Lcy}\)
posted @ 2025-04-06 18:26  Hstry  阅读(9)  评论(0)    收藏  举报