我正在尝试在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个变量的算法,或者用一种我不知道的语言......
答案 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也给出了方程的解。