【发布时间】: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 的紧凑型筛子”及其变体。谢谢!
【问题讨论】:
-
这可能更适合 codereview.stackexchange.com 或 codegolf.stackexchange.com ,具体取决于您的主要目标是“尽可能紧凑而又不可读”或“尽可能紧凑,即使它变得不可读。”
标签: python optimization