找到具有3个变量的丢番图方程的一个特定解和一个解的数量的有效算法

时间:2014-11-21 15:58:25

标签: c++ c algorithm equation

我正在尝试在C ++ / C中创建一个有效的算法,以找到一个(任何)解决方案和Diophantine方程Ax+By+Cz=D的解的数量,其中A,B,C,D是用户给出的整数x,y,z在用户指定的范围内运行。 x,y,z也是整数。

我不想通过做3个嵌套循环来使用强力方法,因为它是O(n ^ 3)。

因此算法中的第一件事就是找出是否有解决方案:

Ax+By=gcd(A,B)

gcd(A,B)w+Cz=gcd(gcd(A,B),C)

最后,如果gcd(gcd(A,B),C)除以D,则会有解决方案。

我可以做到这一点,但现在我又回到了原点......我正试图找到关于如何做好几个小时的参考资料,但我找到的只是蛮力或2个变量的算法,或者用一种我不知道的语言......

2 个答案:

答案 0 :(得分:1)

使用Extended Euclidean algorithm。没有太多可说的,链接说明了一切。而且你已经打破了这个问题并简化Ax+By=gcd(A,B)问题。

答案 1 :(得分:0)

找到丢番图方程Ax+By+Cz=D的解的数量的问题等于Coin Change Problem和D和硬币面额A,B,C。
它可以通过动态编程来解决(考虑到x,y,z的有限范围)。 DP也给出了方程的解。