【问题标题】:Why is my Sieve of Eratosthenes removing the non-prime numbers?为什么我的埃拉托色尼筛法会去除非质数?
【发布时间】:2016-06-16 00:16:13
【问题描述】:

我的代码:

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。我哪里出错了?除了素数之外,输出甚至没有显示任何其他数字。

【问题讨论】:

  • “我试图保持偶数” - 但除了 2,它们不是素数。为什么要保留它们?
  • 你在哪里“把它改成0”?
  • 对不起。我的意思是说非质数。不是偶数。
  • 非质数进入not_primeprimes 只包含质数。这就是重点。有什么问题?
  • 您在哪里使用附加到not_prime 集合的值?

标签: python sieve-of-eratosthenes


【解决方案1】:

那么在这种情况下,你不能在 no_prime 子句中添加零而不是 continue 吗?

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]

或者,如果这超出了玩具范围,您可能想要研究稀疏数组。

【讨论】:

  • 我最初是这样做的,但由于某种原因,数字重复了。所以我想可能还有另一种方法。
  • 编辑添加回丢失的继续;声明。
  • Jkim,恐怕不太清楚您要实现什么,以及您希望堆栈溢出社区在这里为您提供什么帮助。也许您可以为您的问题添加一些进一步的解释和预期的输出
猜你喜欢
  • 1970-01-01
  • 2014-10-17
  • 2015-08-12
  • 1970-01-01
  • 2011-12-16
  • 2017-11-14
  • 1970-01-01
相关资源
最近更新 更多