什么是扩展欧几里得算法?
exgcd适用于处理一次不定方程的一个算法,可以求出不定方程的一组特解
例如可以用于求解:ax+by=k。给定a,b,k的值,便可以求出一组x,y的解
算法的实现
在exgcd中,我们实际是求不定方程ax+by=gcd(a,b),并且,我们所返回的值,是这组解(x,y)的最大公因数(gcd(x,y))。
所以我们最后得到的解,要通过X=x∗k/gcd(a,b),Y=(k−a∗x)/gcd(a,b)来进行一个小小的转换,得到一组解
下面对算法实现过程给出一个证明
我们通过递归,就可以得到一组特解
给出模板
ll Exgcd(ll a, ll b, ll &x, ll &y) {
if (!b) {
x = 1;
y = 0;
return a;
}
ll d = Exgcd(b, a % b, x, y);
ll t = x;
x = y;
y = t - (a / b) * y;
return d;
}