欧几里得算法
欧几里得辗转相除法
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;
}
参考
- \(\text{12.11 math1.pdf \; \;by Tx\_Lcy}\)

浙公网安备 33010602011771号