Rumah > pembangunan bahagian belakang > C++ > Apakah Kaedah Paling Elegan untuk Menjana Nombor Perdana N Pertama?

Apakah Kaedah Paling Elegan untuk Menjana Nombor Perdana N Pertama?

DDD
Lepaskan: 2025-01-13 08:12:43
asal
180 orang telah melayarinya

What's the Most Elegant Method for Generating the First N Prime Numbers?

Cara yang elegan untuk menjana nombor perdana

Matlamatnya ialah untuk menulis fungsi generatePrimes(n) yang mengembalikan n nombor perdana yang pertama. Terdapat pelbagai cara untuk mencapai fungsi ini, masing-masing dengan kebaikan dan keburukan mereka sendiri. Artikel ini meneroka kaedah yang paling elegan.

Pendekatan asal biasanya menggunakan gelung bersarang untuk menyemak nombor perdana. Walaupun pendekatan ini berfungsi, ia tidak mempunyai keanggunan kerana strukturnya yang berulang dan bersarang. Pendekatan yang lebih elegan ialah menggunakan Ayak Eratosthenes, yang mempunyai kerumitan masa O(n log log n).

Ayak Eratosthenes berfungsi dengan mencipta tatasusunan boolean saiz n, dengan semua elemen pada mulanya ditetapkan kepada benar. Indeks tatasusunan mewakili nombor dari 0 hingga n-1. Algoritma mula-mula menetapkan elemen pada indeks 0 dan 1 kepada palsu kerana ia bukan nombor perdana. Kemudian, untuk setiap indeks i, ia menetapkan semua gandaan i dalam tatasusunan kepada palsu. Proses ini diulang untuk semua indeks sehingga punca kuasa dua n. Baki elemen benar dalam tatasusunan mewakili nombor perdana.

Berikut ialah pelaksanaan Java yang elegan bagi Sieve of Eratosthenes:

<code class="language-java">public static List<Integer> generatePrimes(int n) {
    if (n <= 0) {
        return new ArrayList<>();
    }
    boolean[] isPrime = new boolean[n + 1];
    Arrays.fill(isPrime, true);
    isPrime[0] = isPrime[1] = false;
    for (int p = 2; p * p <= n; p++) {
        if (isPrime[p]) {
            for (int i = p * p; i <= n; i += p) {
                isPrime[i] = false;
            }
        }
    }
    List<Integer> primes = new ArrayList<>();
    for (int i = 2; i <= n; i++) {
        if (isPrime[i]) {
            primes.add(i);
        }
    }
    return primes;
}</code>
Salin selepas log masuk

Kod ini dengan cekap dan elegan menjana nombor perdana n pertama menggunakan penapis Eratosthenes. Kerumitan masa ialah O(n log log n), kodnya ringkas dan jelas, dan ia sesuai untuk menjana nombor perdana.

Atas ialah kandungan terperinci Apakah Kaedah Paling Elegan untuk Menjana Nombor Perdana N Pertama?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan