Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Mengoptimumkan Penjana Nombor Perdana Mudah dalam Python?

Bagaimanakah Saya Boleh Mengoptimumkan Penjana Nombor Perdana Mudah dalam Python?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-15 09:27:02895semak imbas

How Can I Optimize a Simple Prime Number Generator in Python?

Mengoptimumkan Penjana Nombor Perdana Mudah dalam Python

Kod Python yang disediakan bertujuan untuk menjana nombor perdana tetapi memerlukan peningkatan untuk kecekapan.

Isu dengan Yang Asal Kod:

  1. Gelung menyemak kebolehbahagiaan tetapi tersalah mencetak kiraan walaupun ia menjumpai pembahagi.
  2. Pernyataan continue menamatkan lelaran semasa tetapi harus digantikan dengan pemecahan untuk berhenti mencari sama sekali apabila pembahagi ditemui.

Diperbaiki Kod:

import math

def main():
    count = 3
    while True:
        isprime = True
        for x in range(2, math.ceil(math.sqrt(count)) + 1):
            if count % x == 0: 
                isprime = False
                break
        if isprime:
            print(count)
        count += 1

Penjelasan:

  • Gelung luar menambah kiraan untuk menguji kemungkinan perdana seterusnya.
  • Gelung dalam kini berjalan sehingga punca kuasa dua kiraan, kerana mana-mana pembahagi yang lebih besar daripada punca kuasa dua akan mempunyai pembahagi yang sepadan di bawah punca kuasa dua.
  • Jika kiraan boleh dibahagikan dengan mana-mana x, bendera isprima ditetapkan kepada Palsu dan gelung dalam pecah.
  • Jika tiada pembahagi ditemui, kiraan itu ialah perdana dan ialah dicetak.

Perdana Termaju Penjanaan:

Untuk penjanaan perdana yang lebih cekap, Ayak Eratosthenes disyorkan. Berikut ialah pelaksanaan Python yang dioptimumkan dengan ulasan:

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

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan Penjana Nombor Perdana Mudah dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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