素数pythonicを生成するための次のコードはありますか?はこの素数ジェネレータPythonicです
def get_primes(n):
primes=[False,False]+[True]*(n-1)
next_p=(i for i,j in enumerate(primes) if j)
while True:
p=next(next_p)
yield p
primes[p*p::p]=[False]*((n-p*p)//p+1)
next(next_p)は、最終的に何らかの方法でget_primesを終了するStopIterationエラーをスローします。それは悪いですか?
また、next_pは素数を反復するジェネレータですが、反復中に素数は変化します。その悪いスタイルですか?
文は最初の100万個の素数のために0.25秒の下でそれを取得する場合、次の追加:
if p*p<=n:
primes[p*p::p]=[False]*((n-p*p)//p+1)
あなたは '素数=を使用したい場合は、1行を保存することができます[FALSE、FALSE] + [真] *(n-1)の'、また複雑さを追加するあなたも、数字をスキップし、半分のふるいを使用するように最適化することができます。 http://stackoverflow.com/a/3035188/464543を参照してください – ChessMaster
@ChessMasterに感謝 –
私のマシンで 'p * p <= n:' ...という行なしで0,1,2,3のコードをテストしてください行が必要ない – ChessMaster