Python素数ジェネレーターを検索すると、次のことがわかりました。
def primes(n):
if n==2: return [2]
elif n<2: return []
s=range(3,n+1,2)
mroot = n ** 0.5
half=(n+1)/2-1
i=0
m=3
while m <= mroot:
if s[i]:
j=(m*m-3)/2
s[j]=0
while j<half:
s[j]=0
j+=m
i=i+1
m=2*i+3
return [2]+[x for x in s if x]
print primes(13)
print primes(3000)
また:
def get_primes(number):
while True:
if is_prime(number): #is_prime is defined somewhere else
yield number
number += 1
リストを返すのとyieldコマンドのどちらが効率的ですか? なんで?最初の 1000 個の素数など、非常に大量の素数を探しているとします。ところで、2 番目のコードは無限ループのようですが、どうすれば止められますか?
たくさんの質問をありがとう。