1.原理
GCD算法是用于求解最大公约数的方法,利用了欧几里得算法,即辗转相除法。(以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数)
2.gcd递归求解
//代码实现
int gcd(int a, int b){
return b ? gcd(b, a % b) : a;
}
3.exgcd 扩展欧几里得算法
ax+by=d 其中a,b已知,d为a,b的最大公约数
可以求出系数 x y
//代码实现
LL exgcd(LL a, LL b, LL &x, LL &y)
{
if(!b) //如果b=0返回a 为最大公约数
{
x = 1, y = 0; //ax + by = d 所以系数x=1 y=0
return a;
}
LL d = exgcd(b, a % b, y, x); //d为a和 b的最大公约数
y -= a / b * x;
return d;
}