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.


Anmelden zum Antworten