我正在解决euler问题108,因此我希望找到整数n
,以便有1000种组合:1/i + 1/t = 1/n
(i
和{{ 1}}是随机数)。我的代码:
t
但是,这不会终止。怎么会?我重置了每一轮的计数器并检查它是否达到了值1000。
答案 0 :(得分:2)
你的循环需要太多时间来终止。
每个循环中都有相当多的步骤,这是通过乘以时间复杂度(O(loopIter1*loopIter2*loopIter3)
)来计算的,这导致了相当大的时间。
正如@BorisTheSpider所提到的,你的循环将导致2e17次迭代,这需要几年(或几十年)才能终止 - 好吧,不建议等待那么多:)
还要考虑您可能超过整数变量beyond its max value。
虽然这可能不会导致Java中的溢出或下溢,但它仍然可能导致意外行为,因为在整数变量达到Integer.MAX_VALUE
(即2 ^ 32 - 1)之后,增量将使其值{ {1}}等等。
如果int max值超出上述值,某些检查可能会失败:认为Integer.MIN_VALUE
,Integer.MAX_VALUE > 1000
会导致Integer.MAX_VALUE + 1
。
在你的代码中,它似乎并没有直接影响它,但我会在你的计算中认真考虑这种效果。