【发布时间】:2017-03-30 12:47:41
【问题描述】:
p = []
for x in range(1, 50000000):
count = 0
for y in range(1, x // 2 + 1):
if (x % y == 0):
count += y
if (count == x):
p.append(x)
这是我的代码,用于尝试查找源自 1 到 50000000 之间的所有完美数字。它对前 3 个数字工作正常,它们在 1 到 10000 之间。但是随着它的进展,它变得非常缓慢。就像可能每 10 秒通过 1000 个数字。然后最终每 5 秒通过 10 个数字。
现在有什么办法可以让这更快吗?我尝试包含一些较小的东西,例如将 x 减 2 以确保我们不会超过一半(不会是 x 的倍数)
【问题讨论】:
-
我认为你不应该用蛮力的方式来解决这个数学问题,我建议你阅读更多关于梅森素数的内容,然后你就会明白你的方法在全部:)
标签: python loops optimization range perfect-numbers