为什么我的Eratosthenes筛子会删除非素数?

时间:2016-06-16 00:16:13

标签: python sieve-of-eratosthenes

我的代码:

def sieve(list1):

    not_prime = set()
    primes = []
    for i in range(2, list1+1):
        if i in not_prime:
            continue
        for x in range(i*2, list1+1, i):
            not_prime.add(x)
        primes.append(i)
    return primes

我试图保留非素数并将其改为0.我哪里错了?除了素数之外,输出甚至没有显示任何其他数字。

1 个答案:

答案 0 :(得分:0)

那么在那种情况下,你不能在no_prime子句中追加零而不是继续吗?

def sieve(list1):
    not_prime = set()
    primes = []
    for i in range(2, list1+1):
        if i in not_prime:
            primes.append(0);
            continue;
        for x in range(i*2, list1+1, i):
            not_prime.add(x)
        primes.append(i)
    return primes



sieve(27)

# output [2, 3, 0, 5, 0, 7, 0, 0, 0, 11, 0, 13, 0, 0, 0, 17, 0, 19, 0, 0, 0, 23, 0, 0, 0, 0]

或者如果这是玩具之外的任何东西,你可能想要查看稀疏数组。