数论 · 扩展欧几里得算法
问题
扩展欧几里得算法是用来在已知
求解
exgcd的拓展应用及说明证明。
首先,解一定存在(证明略)。
其次,由
注意,在这一行柿子中,
因为当前 exgcd 中的 a 和 b 与上一次 exgcd 中的 a 和 b 不同,所以对应的解不同。
所以,当
然后递归回去的时候就可以求出最终的
代码
inline void exgcd (int a, int b)//求解 ap + bq = gcd (a, b) 时的 p 和 q
{
if (!b)//此时有了 gcd (a, b)
{
x = 1, y = 0;
return;
}
exgcd (b, a % b);
int t = x;
x = y, y = t - a / b * y;
//此时的 x, y 满足 ax + by = gcd (a, b)
}
——