擅长:python、mysql、java
<p>这个筛子需要在候选素数上进行循环排序。所讨论的代码是枚举字典的键,这些键不能保证是有序的。相反,继续使用<code>xrange</code>初始化主筛选循环的字典以及返回结果循环,如下所示:</p>
<pre><code>def sieve3(n):
top = n+1
sieved = dict.fromkeys(xrange(3,top,2), True)
for si in xrange(3,top,2):
if si * si > top:
break
if sieved[si]:
for j in xrange(3*si, top, si*2):
sieved[j] = False
return [2] + [pr for pr in xrange(3,top,2) if sieved[pr]]
</code></pre>