找到特殊的整数,代码效率不够

时间:2016-03-12 16:07:06

标签: java

我正在解决euler问题108,因此我希望找到整数n,以便有1000种组合:1/i + 1/t = 1/ni和{{ 1}}是随机数)。我的代码:

t

但是,这不会终止。怎么会?我重置了每一轮的计数器并检查它是否达到了值1000。

1 个答案:

答案 0 :(得分:2)

你的循环需要太多时间来终止。

每个循环中都有相当多的步骤,这是通过乘以时间复杂度(O(loopIter1*loopIter2*loopIter3))来计算的,这导致了相当大的时间。

正如@BorisTheSpider所提到的,你的循环将导致2e17次迭代,这需要几年(或几十年)才能终止 - 好吧,不建议等待那么多:)

还要考虑您可能超过整数变量beyond its max value。 虽然这可能不会导致Java中的溢出或下溢,但它仍然可能导致意外行为,因为在整数变量达到Integer.MAX_VALUE(即2 ^ 32 - 1)之后,增量将使其值{ {1}}等等。

如果int max值超出上述值,某些检查可能会失败:认为Integer.MIN_VALUEInteger.MAX_VALUE > 1000会导致Integer.MAX_VALUE + 1

在你的代码中,它似乎并没有直接影响它,但我会在你的计算中认真考虑这种效果。