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

时间:2012-11-10 00:33:11

标签: java equation diophantine

我有一个编程的程序,它将解决5-1五阶Diophantine方程,它基本上是A ^ 5 + B ^ 5 + C ^ 5 + D ^ 5 + E ^ 5 = F ^ 5,其中0 < A< = B< = C< = D< = E< = F< = N.我将实现它的方式是预先计算给定N值的值然后将其存储到数组中。因此,例如,如果N为100,它将在数组中存储1到100之间的值。

然后我将计算第一组的值,A ^ 5 + B ^ 5 + C ^ 5,第二组,F ^ 5 - (D ^ 5 + E ^ 5),并比较来自的值第一组到第二组,看看它们是否匹配。如果匹配,则找到解决方案。

我的问题是,如何使用介于1到N之间的值数组来计算两组的所有可能值?我有这个想法,但编码出来,我不知道如何处理它。任何人都可以给我一些提示吗?我不是要求如何编码它的解决方案,我只是想要一些提示/提示,这可以帮助我更好地理解编码过程。谢谢!

3 个答案:

答案 0 :(得分:4)

我肯定会从计算每个数字1到N的所有5阶值开始 然后我会从侧面开始F ^ 5 - (A ^ 5 + B ^ 5 + C ^ 5 + D ^ 5 + E ^ 5),

1)外循环,生成F ^ 5的值 从最高可能值开始 幸运的是,我们知道F的最小值是72。 兰德和帕金(1967)

其余循环的

以最低值开始,

2)第二次循环,生成E ^ 5

的值

3)第3次循环,为D ^ 5生成值,测试值为F ^ 5 - (D ^ 5 + E ^ 5)如果为负则则可以打破此循环(但不是外循环

继续剩下3个循环,剩余3个值。如果你的等式 每个循环将有越来越少的值来测试。因为我们可以在等式变为负数时停止,或者我们达到已经使用过的数字

等式为零的任何解决方案都是一种解决方案。

时间分析很困难,如果N ^ 2会产生前2个循环,但剩下的4个循环会小得多,甚至可能每个登录时间都有希望nlogn时间在一起

我测试了n = 600。其中有最大的解决方案 218 ^ 5 + 276 ^ 5 + 385 ^ 5 + 409 ^ 5 + 495 ^ 5 = 553 ^ 5 一个N ^ 6方程将以4E16步骤到达该解,我的在2E15或5%的时间到达它。

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

答案 1 :(得分:2)

更好的解决方案,首先生成所有5阶订单值并将其存储在数组中。

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

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

使用2个嵌套循环来比较F ^ 5-E ^ 5-D ^ 5和A ^ 5 + B ^ 5 + C ^ 5的值。如果他们是相同的,你有一个解决方案。打印a,b,c,d,e和f的相应值。

我们只使用2对3个嵌套循环。如果不是O(3n)

,该解决方案将是O(3nlogn)

答案 2 :(得分:1)

对@Gregory解决方案的一个小改进是在这里和那里削减一些值。

1

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

2

在第二个周期(E)中,我们可以考虑

这一事实
F^5 =  A^5 + B^5 + C^5 + D^5 + E^5 < 5*E^5 

因此,在E的周期中,我们不必从0开始,但我们可以从第一个E开始

5*E^5 > F^5

然后转到F-1

在第三个周期(D),我们会遇到与上一个不同的不等式

 F^5 - E^5 = A^5 + B^5 + C^5 + D^5 < 4^D5

我们应该开始测试满足这个条件的第一个D

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

这看起来并不多,但同样的想法有助于解决一些竞争问题。