gpt4 book ai didi

Python Eratosthenes 筛算法优化

转载 作者:太空宇宙 更新时间:2023-11-04 06:24:48 24 4
gpt4 key购买 nike

我正在尝试实现埃拉托色尼筛法。输出似乎是正确的(减去需要添加的“2”),但如果函数的输入大于 100k 左右,它似乎需要过多的时间。我可以通过哪些方式优化此功能?

def sieveErato(n):
numberList = range(3,n,2)

for item in range(int(math.sqrt(len(numberList)))):
divisor = numberList[item]
for thing in numberList:
if(thing % divisor == 0) and thing != divisor:
numberList.remove(thing)
return numberList

最佳答案

您的算法不是埃拉托色尼筛法。您执行试验除法(模数运算符)而不是像埃拉托色尼 2000 多年前所做的那样交叉乘数。 Here是对真正筛选算法的解释,下面显示的是我简单、直接的实现,它返回不超过 n 的素数列表:

def sieve(n):
m = (n-1) // 2
b = [True]*m
i,p,ps = 0,3,[2]
while p*p < n:
if b[i]:
ps.append(p)
j = 2*i*i + 6*i + 3
while j < m:
b[j] = False
j = j + 2*i + 3
i+=1; p+=2
while i < m:
if b[i]:
ps.append(p)
i+=1; p+=2
return ps

我们只筛选奇数,在 n 的平方根处停止。 j 上奇怪的计算映射在被筛选的整数 3、5、7、9 ...... 和 b 中的索引 0、1、2、3 ...... 位数组。

您可以在 http://ideone.com/YTaMB 上看到这个函数的运行情况。 ,它在不到一秒的时间内计算出一百万个素数。

关于Python Eratosthenes 筛算法优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9043791/

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