【发布时间】:2022-11-29 04:46:09
【问题描述】:
我已经解决了关于 200 万以下所有素数之和的问题 10,但是我的代码需要几分钟才能计算出结果。
我只是想知道是否有任何方法可以优化它以使其运行得更快?
- 代码取上限
- 生成数组
- 遍历它并删除数字的倍数,将其替换为 0
- 获取过滤后的数组并循环遍历下一个非零数字
- 增加这个数字直到它是限制的平方根。
- 打印出剩余的内容。
import numpy as np
def sievePrime(n):
array = np.arange(2, n)
tempSieve = [2]
for value in range(2, int(np.floor(np.sqrt(n)))):
if tempSieve[value - 2] != value:
continue
else:
for x in range(len(array)):
if array[x] % value == 0 and array[x] != value:
array[x] = 0
tempSieve = array
return sum(array)
print(sievePrime(2000000))
感谢您的时间。
【问题讨论】:
-
用 C/C++ 写这个怎么样? Python 对于这些任务来说真的很慢。
-
1.偶数不用查,都是合数(2除外)。 2. 对于一个给定的数字,你不需要检查它是否可以被所有不超过 2mil 的数字整除,只需要被小于给定数字的素数整除
-
一旦您确定了一个新素数
p并希望将它的倍数设置为0,请使用步长为p的 for 循环。您的代码正在做的是测试全部p以上的数字,看看它们是否是倍数。那是非常低效的。 -
问题 - 你能做第 3 方库吗快速素数?似乎没问题 - 因为你在这里使用 np 。
标签: python python-3.x