Mengapa kod Python ini hanya mengira nombor perdana tetapi tidak mencetaknya?

Susan Sarandon
Lepaskan: 2024-11-11 11:18:03
asal
619 orang telah melayarinya

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

Penjana Nombor Perdana Mudah dalam Python

Kod ini bertujuan untuk menjana senarai nombor perdana yang ringkas, tetapi pada masa ini ia hanya mencetak kiraan , tidak kira sama ada nombor itu perdana atau tidak.

Masalahnya

Kod menggunakan gelung bersarang untuk menyemak kebolehbahagi pembilang (bilangan) dengan nombor daripada 2 kepada punca kuasa dua kiraan. Walau bagaimanapun, ia secara salah mengandaikan bahawa jika nombor tidak boleh dibahagikan dengan lelaran semasa bagi gelung dalam, ia mestilah perdana.

Pembetulan

Untuk menangani isu ini , kami memperkenalkan pembolehubah boolean, isprime, untuk menjejak status prima kiraan. Dalam gelung dalam, jika kiraan boleh dibahagikan dengan nilai semasa x, kami menetapkan isprima kepada False dan memecahkan gelung. Ini memastikan bahawa kami hanya mencetak kiraan jika ia benar-benar prima.

Pelaksanaan Dioptimumkan

Walaupun kod ini memberikan pemahaman asas tentang penjanaan perdana, pendekatan yang lebih cekap dikenali sebagai penapis Eratosthenes boleh digunakan. Teknik ini bermula dengan menganggap semua nombor adalah perdana dan kemudian berulang melalui jujukan, menandakan bukan nombor perdana sebagai komposit.

Berikut ialah pelaksanaan Sieve of Eratosthenes yang sangat dioptimumkan:

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
Salin selepas log masuk

Ini kod mengembalikan penjana yang menghasilkan nombor perdana. Ia menggunakan sistem pemetaan yang cekap ingatan untuk mengesan komposit dan saksinya. Pengoptimuman ini dengan ketara mengurangkan masa dan sumber pengiraan yang diperlukan untuk menjana nombor perdana yang besar.

Atas ialah kandungan terperinci Mengapa kod Python ini hanya mengira nombor perdana tetapi tidak mencetaknya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan