小编adh*_*hdj的帖子

如何加速Eratosthenes python列表生成器的筛选

我的问题直接来自CS圈子网站.这是对底部的最后一个问题这一页称为"引为起飞".基本纲要是他们想要一个1,000,001长度的列表,其中如果索引是素数,则每个项目的索引为True,而如果它不是素数,则每个项目的索引为False.

因此,例如,isPrime [13]是True.isPrime [14]是假的.

列表'isPrime'的第一点看起来像:

isPrime = [False, False, True, True, False, True, False, True, False, False, ...]
Run Code Online (Sandbox Code Playgroud)

我的问题是他们有7秒的时间限制.我有一个下面的工作代码,数字较小,为101,用于调试目的.当我将它提升到所需的1,000,001列表长度时,它需要的时间太长,几分钟后我终于杀死了程序.这是我的工作(长度为101),代码非常慢:

n = 101
c = 2
isPrime = [False,False]
for i in range(2,n):
    isPrime.append(i)

def ifInt(isPrime):
    for item in isPrime:
        if type(item) == int:
            return item
for d in range(2,n):
    if c != None:
        for i in range(c,n,c):
            isPrime[i] = False
        isPrime[c] = True
        c = ifInt(isPrime)
Run Code Online (Sandbox Code Playgroud)

然后是我在这里找到的这个.它有一个更快的运行时间,但只输出一个素数列表,而不是一个n长度列表,list [n]返回True表示素数,否则返回false.

我不确定这个第二位代码是否真的能够在7秒内创建长度为1,000,001的素数列表,但这是我在研究中找到的最相关的东西.

def primes_sieve1(limit):
limitn = limit+1 …
Run Code Online (Sandbox Code Playgroud)

python computer-science list

7
推荐指数
1
解决办法
826
查看次数

标签 统计

computer-science ×1

list ×1

python ×1