擅长:python、mysql、java
<p>问题是代码太慢了。幸运的是,有一个简单的优化,可以节省你</p>
<p>注意,如果<code>d</code>是<code>n</code>的除数,那么<code>n / d</code>也是一个除数。此外,如果<code>d</code>小于<code>sqrt(n)</code>,则<code>n / d</code>大于<code>sqrt(n)</code>(反之亦然)</p>
<p>这实际上意味着我们只需要检查到<code>sqrt(n)</code>的数字,而不是检查到<code>n</code>的所有数字。对于我们找到的每一个除数<code>d</code>,我们也确保将<code>n / d</code>添加到除数和中,除非<code>d</code>是<code>1</code>或者正好是<code>sqrt(n)</code></p>
<p>下面是代码中可能出现的情况:</p>
<pre class="lang-py prettyprint-override"><code> l = 1
for i in range(1, int(sqrt(n)) + 1):
if n % i == 0:
l += i
if i < sqrt(n): l += n // i
if l > n + 2: break
</code></pre>
<p>另一个小错误是,当<code>l > n + 2</code>时,您将打印两次消息,这很容易通过删除<code>break</code>之前的<code>print</code>来解决</p>