在Java中生成丢番图方程的值?

在Java中生成丢番图方程的值?,java,equation,diophantine,Java,Equation,Diophantine,我有一个程序来编码,它将求解一个5-1的五阶丢番图方程,基本上是a^5+B^5+C^5+D^5+E^5=F^5,其中0),我们可以考虑 F^5 = A^5 + B^5 + C^5 + D^5 + E^5 < 5*E^5 然后转到F-1 在第三个周期(D)中,我们会有一个类似于上面的不等式 F^5 - E^5 = A^5 + B^5 + C^5 + D^5 < 4^D5 F^5-E^5=A^5+B^5+C^5+D^5

我有一个程序来编码,它将求解一个5-1的五阶丢番图方程,基本上是a^5+B^5+C^5+D^5+E^5=F^5,其中0 1) 外循环,为F^5生成值 从可能的最高值开始 幸运的是,我们知道F的最小值是72。 兰德和帕金(1967年)

对于其余循环,从最低值开始

2) 第二个循环,为E^5生成值

3) 第三个循环,生成D^5的值,测试F^5的值-(D^5+E^5)如果为负,则可以中断此循环(但不能中断外部循环

继续进行3个剩余循环,得到3个剩余值 每个循环要测试的值会越来越少,因为我们可以在方程变为负数或达到已使用的数字时停止

方程等于零的任何解都是解

时间分析是困难的,如果N^2,将产生前2个循环,但剩余的4个循环将小得多,甚至可能是logn time,每个循环都可能同时进行

我用n=600进行测试。其中最大的解决方案是
218^5 + 276^5 + 385^5 + 409^5 + 495^5 = 553^5 一个N^6方程将在4E16步中得出该解,我的方程在2E15步或5%的时间内达到该解


不确定这是否会降低到n^3logn,但它通过跳过大量不正确的解决方案使您更接近它。

更好的解决方案是,首先生成所有五阶值并将它们存储在一个数组中

然后使用3个嵌套循环生成F^5-E^5-D^5的每个组合并存储所有这些组合

然后使用3个不同的嵌套循环生成^5+B^5+C^5的每个组合,并存储所有这些值

使用两个嵌套循环比较F^5-E^5-D^5和A^5+B^5+C^5的值。如果它们相同,则有一个解决方案。打印A、B、C、D、E和F的相应值


我们只使用2对3个嵌套循环。如果不是O(3n),这个解决方案将是O(3nlogn)

与@Gregory解决方案相比,一个小小的改进就是在这里和那里剃掉一些值

一,

我不明白为什么当给定的等式为负时我们应该停止,因为我们知道每个字母都比前一个小。例如,在这种情况下,前两个循环应该采取大约(N^2/2)步

二,

第二个周期(<代码> E < /代码>),我们可以考虑

F^5 =  A^5 + B^5 + C^5 + D^5 + E^5 < 5*E^5 
然后转到
F-1

在第三个周期(
D
)中,我们会有一个类似于上面的不等式

 F^5 - E^5 = A^5 + B^5 + C^5 + D^5 < 4^D5
F^5-E^5=A^5+B^5+C^5+D^5<4^D5
我们应该开始测试满足这个条件的第一个
D

这同样适用于其余的内部循环


这看起来不太像,但同样的想法在一些竞争问题上有所帮助。

到目前为止,你有什么收获?我建议只使用6个嵌套循环。目前我还没有做任何编码。我只是在开始之前将想法写在纸上,这样可以使编码过程更容易。但是6个嵌套循环听起来是一个很好的想法谢谢!虽然6个嵌套循环听起来像程序将在O(N^6)时间内运行。但我正在尝试使它在O(N^3 logN)时间内运行时间。准确地说。对于N=100、~100^6或~10^12。长时间等待。唯一的解决方法是找到一种可以跳过一些可能的解决方案的方法。我现在已经完成了,但我不确定它是否足够快。有人能想出一种更快的方法吗?基于你的想法,我认为我们可以进一步缩短周期。发布了一个新的答案以保留形式谢谢!这帮助我更好地理解了它!:)你的解决方案不是目前的O(n^3 log n)。要比较这些值,不要使用两个嵌套循环,只需对两个列表进行排序即可。然后按顺序遍历它们,类似于进行合并排序的合并,以比较它们。这比两两比较更有效,因为每个列表都是O(n^3)大。
 F^5 - E^5 = A^5 + B^5 + C^5 + D^5 < 4^D5