gpt4 book ai didi

Python - 完美数搜索的优化

转载 作者:行者123 更新时间:2023-11-28 16:20:32 24 4
gpt4 key购买 nike

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 的倍数)

最佳答案

你可以做得更好。请考虑以下事项:

1) 考虑 36 的因式分解,例如:1x36、2x18、3x12、4x9、6x6。就是这样。更进一步不会添加任何新内容。下一个分解将是 9x4,但我们已经知道 (4x9)。这个优势逐渐变大(将你必须检查的最后一个数字的根与它的一半进行比较)

2) 没有奇完全数。这实际上是一个猜想(尚未证明),但他们尝试了 10^300 以下的所有内容,但没有找到。所以绝对没有 < 50000000。这意味着你可以跳过一半的条款。

from math import ceil
p = []
for x in range(2, 50000000, 2):
divisors = {1}
for y in range(2, ceil(x**0.5) + 1):
if x % y == 0:
divisors.update({y, (x//y)})
if sum(divisors) == x:
print('-', x)
p.append(x)
#- 6
#- 28
#- 496
#- 8128

这应该快得多,但肯定可以做更多的事情。

关于Python - 完美数搜索的优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40630128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com