Sieb des Eratosthenes threaded umsetzen
-
Seriell hätte ichs einfach so umgesetzt:
#include <stdio.h> #include <stdlib.h> int main(){ int i,j,max=100000000,*liste; liste=(int*)calloc(max,sizeof(int)); if(liste!=NULL){ max++; liste=(int*)realloc(liste,max*sizeof(int)); } while(liste==NULL){ max--; liste=(int*)realloc(liste,max*sizeof(int)); if (max<0){ printf("Maximum negativ, beende Programm.\n"); return -1; } } for (i=0;i<max;i++) liste[i]=i+1; printf("Primzahlen bis %d werden berechnet...\n",max); liste[0]=0; for(j=0;((liste[j]*liste[j])<max);j++){ if(liste[j]){ for(i=j+liste[j];i<max;i+=liste[j]){ liste[i]=0; } } } // printf("Liste der Primzahlen bis: %d\n",max); // for (i=0;i<max;i++) // if(liste[i]) // printf("%d\t", liste[i]); free(liste); return 0; }
-
Also deine realloc-Sauerei finde ich nicht wirklich gut und fuehert zu memory leaks falls realloc fehlschlaegt.
-
Sauerei triffts gut, da haste recht. Beim Ausführen merkt mans spätestens, dass man das besser machen sollte.
EDIT: Wie kann man die Speicherallokation anders/besser machen? Ich bin wie gesagt Anfänger, also bin ich um jede Art von Hilfe dankbar.