擅长:python、mysql、java
<p>因为函数p()单调递增,所以可以避免比较值,因为<em>g>;i</em>意味着<em>p(g)>;p(i)</em>。此外,内环可以很早被打破,因为<em>p(g)-p(i)>;=diff</em>意味着<em>p(g+1)-p(i)>;=diff</em>。在</p>
<p>为了正确起见,我更改了quickCheck中的等式比较,将差异与epsilon进行比较,因为与浮点的精确比较非常脆弱。在</p>
<p>在我的机器上,使用Python2.6将运行时间减少到7.8ms。在JIT中使用PyPy可以将此时间缩短到0.77ms</p>
<p>在进行微优化之前,先看看微优化。微优化使得发现算法的变化变得更加困难,以获得相对较小的收益。在</p>
<pre><code>EPS = 0.00000001
def quickCheck(n):
partial_c = sqrt(1 + 24*n) / -6
c = 1/6 + partial_c
if abs(int(c) - c) < EPS:
return True
c = 1/6 - partial_c
if abs(int(c) - c) < EPS:
return True
return False
def p(i):
return i * (3 * i - 1 ) / 2
def main(maxNumber):
diff = 1000
for i in range(1, maxNumber):
for g in range(i+1, maxNumber):
if p(g) - p(i) >= diff:
break
if quickCheck(p(g) - p(i)) and quickCheck(p(g) + p(i)):
print('New couple ', p(g), p(i), p(g) - p(i))
diff = p(g) - p(i)
</code></pre>