Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh menjana nombor perdana dalam Python dengan cekap?

Bagaimanakah saya boleh menjana nombor perdana dalam Python dengan cekap?

Susan Sarandon
Susan Sarandonasal
2024-11-13 04:07:49574semak imbas

How can I generate prime numbers in Python efficiently?

Penjana Nombor Perdana Mudah dalam Python dengan Logik Yang Diperbaiki

Kod yang diberikan bertujuan untuk menjana nombor perdana tetapi menghadapi masalah. Berikut ialah perincian isu dan kod yang disemak dengan penambahbaikan:

Masalah dan Penyelesaian:

  • keadaan yang tidak betul untuk mencetak bilangan prima: Menggantikan if count % x != 0 dengan if isprime, kami mencetak nombor perdana sahaja.
  • pengendalian gelung yang salah: Menggunakan break dan bukannya continue membolehkan kami menamatkan gelung apabila bukan- faktor utama dihadapi.
  • julat ujian: Melanjutkan julat ke int(math.sqrt(count) 1) memastikan ujian menyeluruh.
  • Ayak yang dioptimumkan Eratosthenes: Untuk penjanaan yang lebih cekap, kod tersebut menggabungkan algoritma Sieve of Eratosthenes (coretan kod berasingan disediakan untuk rujukan).

Berikut ialah skrip Python yang disemak semula:

import math

def main():
    count = 3

    while True:
        isprime = True

        for x in range(2, int(math.sqrt(count) + 1)):
            if count % x == 0:
                isprime = False
                break

        if isprime:
            print(count)

        count += 1

Ayak Eratosthenes yang 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

Atas ialah kandungan terperinci Bagaimanakah saya boleh menjana nombor perdana dalam Python dengan cekap?. 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