ホームページ  >  記事  >  バックエンド開発  >  この Python コードは素数をカウントするだけで出力しないのはなぜですか?

この Python コードは素数をカウントするだけで出力しないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-11 11:18:03610ブラウズ

Why is this Python code only counting prime numbers but not printing them?

Python の単純な素数ジェネレーター

このコードは素数の単純なリストを生成することを目的としていますが、現在はカウントを出力するだけです

問題

コードは、ネストされたループを使用して、次の数値によるカウンタ (カウント) の割り切れ性をチェックします。 2 をカウントの平方根にします。ただし、数値が内部ループの現在の反復で割り切れない場合、その数値は素数でなければならないと誤って想定しています。

修正

この問題に対処するにはでは、count の素のステータスを追跡するために、ブール変数 isprime を導入します。内側のループ内で、count が x の現在の値で割り切れる場合、isprime を False に設定してループを終了します。これにより、実際に素数である場合にのみ count を出力することが保証されます。

最適化された実装

このコードは素数生成の基本的な理解を提供しますが、より効率的なアプローチは、エラトステネスの篩を使用することができます。この手法は、すべての数値が素数であると仮定することから始まり、シーケンスを反復処理して、非素数を合成としてマークします。

高度に最適化されたエラトステネスのふるいの実装は次のとおりです。

def gen_primes():
    D = {}
    
    q = 2
    
    while True:
        if q not in D:
            yield q
            D[q * q] = [q]
        else:
            for p in D[q]:
                D.setdefault(p + q, []).append(p)
            del D[q]
        
        q += 1

これコードは素数を生成するジェネレーターを返します。メモリ効率の高いマッピング システムを使用して、コンポジットとその目撃情報を追跡します。この最適化により、大きな素数の生成に必要な時間と計算リソースが大幅に削減されます。

以上がこの Python コードは素数をカウントするだけで出力しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。