Alle Primzahlen ausdrucken
In diesem Schritt vervollständigen Sie die Implementierung des Sieb des Eratosthenes, indem Sie alle innerhalb des angegebenen Bereichs gefundenen Primzahlen ausdrucken.
Ändern wir die prime_sieve.c
-Datei, um die Ausdruckfunktionalität hinzuzufügen:
cd ~/project
nano prime_sieve.c
Aktualisieren Sie den Code, um Primzahlen auszudrucken:
#include <stdio.h>
#include <stdbool.h>
int main() {
int upper_limit;
printf("Geben Sie die Obergrenze für die Suche nach Primzahlen ein: ");
scanf("%d", &upper_limit);
// Erstellen Sie ein bool'sches Array, um Prim- und Nicht-Primzahlen zu markieren
bool is_prime[upper_limit + 1];
// Initialisieren Sie alle Zahlen als prim
for (int i = 2; i <= upper_limit; i++) {
is_prime[i] = true;
}
// Markieren Sie die Vielfachen jeder Primzahl als nicht-prim
for (int p = 2; p * p <= upper_limit; p++) {
if (is_prime[p]) {
// Markieren Sie die Vielfachen von p als nicht-prim
for (int i = p * p; i <= upper_limit; i += p) {
is_prime[i] = false;
}
}
}
// Drucken Sie alle Primzahlen
printf("Primzahlen bis zu %d sind:\n", upper_limit);
for (int p = 2; p <= upper_limit; p++) {
if (is_prime[p]) {
printf("%d ", p);
}
}
printf("\n");
return 0;
}
Kompilieren und ausführen des Programms:
gcc prime_sieve.c -o prime_sieve
./prime_sieve
Beispielausgabe:
Geben Sie die Obergrenze für die Suche nach Primzahlen ein: 50
Primzahlen bis zu 50 sind:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
Zergliedern wir die letzten Schritte:
- Nachdem die Vielfachen markiert wurden, iterieren wir durch das
is_prime
-Array
- Wir drucken nur die Zahlen aus, die weiterhin als prim markiert sind
- Die Ausgabe zeigt alle Primzahlen bis zur vom Benutzer angegebenen Obergrenze an