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 番目のコードは無限ループのようですが、どうすれば止められますか?
たくさんの質問をありがとう。