擅长:python、mysql、java
<p>我用这个:</p>
<pre><code>def eras(n):
last = n + 1
sieve = [0, 0] + list(range(2, last))
sqn = int(round(n ** 0.5))
it = (i for i in xrange(2, sqn + 1) if sieve[i])
for i in it:
sieve[i * i:last:i] = [0] * (n // i - i + 1)
return filter(None, sieve)
</code></pre>
<p>真正的魔力在于<code>for-loop</code>中的片分配。它一次性地将非素数从<code>i * i</code>归零到<code>n</code>。你知道吗</p>