解决线性丢番图方程的算法是什么:ax + by = c

我在这里寻找整数解决方案。我知道从第一对解和gcd(a,b)| c派生出无穷多个解。但是,我们如何找到第一对解决方案?有没有解决这个问题的算法?

谢谢

回答:

请注意,并非总是有解决方案。实际上,如果c是的倍数,则只有解决方案gcd(a, b)

也就是说,您可以为此使用扩展的欧几里得算法。

这是一个实现它的C ++函数,假设c = gcd(a, b)。我更喜欢使用递归算法:

function extended_gcd(a, b)

if a mod b = 0

return {0, 1}

else

{x, y} := extended_gcd(b, a mod b)

return {y, x-(y*(a div b))}

int ExtendedGcd(int a, int b, int &x, int &y)

{

if (a % b == 0)

{

x = 0;

y = 1;

return b;

}

int newx, newy;

int ret = ExtendedGcd(b, a % b, newx, newy);

x = newy;

y = newx - newy * (a / b);

return ret;

}

现在,如果具有c = k*gcd(a, b)with k > 0,则等式变为:

ax + by = k*gcd(a, b) (1)

(a / k)x + (b / k)y = gcd(a, b) (2)

所以,只要找到你的(2)解决方案,或者找到(1)解决方案和乘法xy通过k

以上是 解决线性丢番图方程的算法是什么:ax + by = c 的全部内容, 来源链接: utcz.com/qa/403827.html

回到顶部