印刷用のリストに変換し、与えられた範囲内の素数を印刷する素数篩ジェネレータを作成しようとしています。私はペアの数が正しいと確信していますが、何らかの理由でプライムではないプライムのリストにいくつか余分な値が入っています。 (私は出力の最後の値がプライムではない3599だったので、これを直ちにキャッチしました)。 任意のヘルプは素晴らしいだろうので、私は論理的なエラーのいくつかの種類を持っている場合は本当にわからないんだけど範囲内のPrime Sieve/pairs
def sieve(n):
a = [True] * (n)
a[0] = a[1] = False
for (i, isPrime) in enumerate(a):
if isPrime:
yield i
for n in range(i*i, n, i):
a[n] = False
def pairs(li):
pair = 0
for i, x in enumerate(li):
if i < len(li)-1:
if li[i] + 2 == li[i+1]:
pair += 1
return pair
p_3600 = list(sieve(3600))
ans = [vals for vals in p_3600 if vals > 1600]
print ans
print "pairs:", pairs(ans)
うんあなたは正しい、sorrそれについてはy。なぜ私はいくつかの余分な数字を取得していたのか理解できるかどうかを確認するために境界をつぶしていただけです。それはnでなければなりません。 – greenteam