擅长:python、mysql、java
<p>有一个更快更短的版本,尽管我很确定它仍然可以改进。在</p>
<pre><code>import time
from math import ceil
# Sum of Proper Divisors of
def sopd(n):
if n == 1: return 0
s = 1
sqrt = ceil(n ** 0.5)
for b in range(2, sqrt):
if n % b == 0:
s += (b + n // b)
return s + (sqrt if sqrt ** 2 == n else 0)
if __name__ == '__main__':
start_time = time.time()
abundant = set()
s = 0
for i in range(1,28124):
if not any(i-a in abundant for a in abundant):
s += i
if sopd(i) > i:
abundant.add(i)
print(s)
print(" - {} seconds -".format(time.time() - start_time))
</code></pre>
<p>在我的电脑上大约需要1.2秒</p>