解决线性丢番图方程的算法是什么: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)解决方案和乘法x
和y
通过k
。
以上是 解决线性丢番图方程的算法是什么:ax + by = c 的全部内容, 来源链接: utcz.com/qa/403827.html