擅长:python、mysql、java
<p>我猜您使用的是Python2,而不是Python3——<code>range(2,n)</code>实际上构造了一个列表!你没有足够的内存来存储6000亿个数字!<code>xrange</code>应该没问题。</p>
<p>而且,你的<code>i=i-1</code>想法也行不通。For循环不像C那样工作,而hack只在C风格的循环中工作。for循环在<code>range(2,n)</code>上迭代。如果<code>i</code>在一次迭代中获得值<code>5</code>,那么无论您对<code>i</code>做什么,它在下一次迭代中仍然获得<code>6</code>。</p>
<p>此外,当您进入循环时,将构造列表<code>range(2,n)</code>。所以当你修改<code>n</code>时,这不会改变任何东西。</p>
<p>你得重新考虑一下你的逻辑。</p>
<p>(如果你不相信我,试着用175作为测试用例)</p>
<p>最后一点,您可能应该养成使用特殊整数除法的习惯:<code>n = n // i</code>。尽管<code>/</code>和<code>//</code>在python 2中的工作方式相同,但这确实是不推荐的行为,而且它们在python 3中的工作方式也不同,在python3中,<code>/</code>将给您一个浮点数。</p>