From ba4dc12e99afffcc251c80819d2fcb71cda7ff5c Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 9 May 2025 11:08:54 +0200 Subject: [PATCH] 27.3 --- primza.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/primza.c b/primza.c index bf6fd65..a74f601 100644 --- a/primza.c +++ b/primza.c @@ -1,21 +1,21 @@ #include #include +#include int main() { int eingabe; - int *zahlenBisN = (int *)malloc(100 * sizeof(int)); // Speicher wird dynamisch für 100 Zeichen reserviert + int *zahlenBisN; do { + zahlenBisN = (int *)malloc(100 * sizeof(int)); // Speicher wird dynamisch für 100 Zeichen reserviert + printf("%s", "Bis wohin sollen die Primzahlen berechnet werden (Ende=0) ? "); scanf("%d", &eingabe); if(eingabe > 100) // Wenn mehr Speicher benötigt wird, dann wird mit realloc mehr speicher reserviert - { - free(zahlenBisN); // Der Speicher von der default reservierung wird freigegeben, damit er erneut reserviert werden kann zahlenBisN = (int *)realloc(zahlenBisN, eingabe * sizeof(int)); - } // Array wird mit zahlen von 1 bis n gefüllt for (int i = 0; i < eingabe; ++i) @@ -23,7 +23,17 @@ int main() zahlenBisN[i] = i+1; } - // Jede nicht Primzahl wird entfernt + // Sieb des Eratosthenes + for (int i = 1; i < eingabe; ++i) { + if (zahlenBisN[i] != 0){ + for (int j = zahlenBisN[i]; j <= eingabe; ++j) { + if (zahlenBisN[j] % zahlenBisN[i] == 0) + zahlenBisN[j] = 0; + } + } + } + // Ursprünglicher Primzahlgenerator + /*// Jede nicht Primzahl wird entfernt for (int i = 0; i < eingabe; ++i) { for (int j = 2; j < i; j++ ) { @@ -32,7 +42,7 @@ int main() zahlenBisN[i] = 0; } } - } + }*/ // Alle zahlen die noch im String vorhanden sind und nicht 0 sind werden ausgegeben for (int i = 1; i < eingabe; ++i) @@ -42,7 +52,7 @@ int main() printf("%10d", zahlenBisN[i]); } } - printf("\n"); + printf("\n"); + free(zahlenBisN); // Speicher wird erneut freigegeben um Memory leaks zu verhindern }while(eingabe != 0); // Das Programm wird so oft wiederholt bis 0 eingegeben wird - free(zahlenBisN); // Speicher wird erneut freigegeben um Memory leaks zu verhindern } \ No newline at end of file