擅长:python、mysql、java
<p>下面是一个简单而快速的Python筛生成器:</p>
<pre><code>maxPrime = int(input("What are the primes up to this number?"))
sieve = list(range(maxPrime))
for i in range(2, maxPrime):
if sieve[i]: # not removed yet = prime!
print(i)
for product in range(i, maxPrime, i): # gets i*n for all n up to i*n > maxPrime
sieve[product] = 0 # marked as not prime
</code></pre>
<p>代码中的问题是总是分配<code>p2=soe[0]</code>。此外,在最后,当您已经从soe中删除了所有内容时,您将打印soe。你知道吗</p>
<p>您应该打印您使用的每个新p2,包括2,并在soe为空时结束程序。你知道吗</p>
<p>这是您正在运行的修改程序,带有注释:</p>
<pre><code>n = int(input("What are the primes up to this number?"))
soe = []
for i in range (2, n+1):
soe.append(i)
# you can progress straight into sieving out numbers!
while p2 < n and soe: # stop when your list is empty!
p2 = soe[0]
print(p2)
for i in soe:
if i % p2 == 0:
soe.remove(i)
# print (soe) # it's going to be empty at the end
</code></pre>