【问题标题】:Compact Sieve of Eratosthenes in Python [duplicate]Python中的Eratosthenes紧凑筛[重复]
【发布时间】:2014-10-06 14:33:20
【问题描述】:

我需要在 Python 中实现 Sieve of Eratosthenes,但由于它在大量代码中的一部分,我希望尽可能紧凑地实现它。虽然有很多很多更有效的方法来完成寻找素数,但我想看看 Python 可以为我做些什么疯狂的紧凑。

程序需要询问用户输入,然后使用从 2 到输入数(包括 2)的筛子输出所有素数。

到目前为止我能做到的最好的是:

n = int(input("To what n do you wish to find primes? "))
sieve = list(range(2, n+1))
for i in range(len(sieve)):
    for j in range(i+1, len(sieve)):
        if sieve[i] == 0:
            continue
        if sieve[j] % sieve[i] == 0:
            sieve[j] = 0
print([i for i in sieve if i != 0])

除此之外,我无法进一步压缩代码。

编辑: 在问这个问题之前找不到使这个重复的响应,因为我一直在专门搜索“Eratosthenes 的紧凑型筛子”及其变体。谢谢!

【问题讨论】:

标签: python optimization


【解决方案1】:

这是我想出的:

n = [False for i in range(int(input('> '))+1)]
n[0] = n[1] = True
for i in range(2, len(n)):
    for j in range(i+1, len(n)):
        n[j] = ((j % i) == 0) if not n[j] else n[j]
print([i for i in range(len(n)) if not n[i]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-27
    • 2014-07-20
    • 1970-01-01
    • 2010-12-19
    • 2016-04-08
    • 1970-01-01
    • 2013-01-19
    • 2019-02-19
    相关资源
    最近更新 更多