Sieb des Eratosthenes

Dein Kollege hat das aber alles andere als gelöst...
Schau dir mein edit oben an.
Da stoßen die eingebauten C-Variablen an ihre Grenzen.

Falls wir die Aufgabenstellung richtig verstehen, musst du wohl oder übel externe Bibliotheken nehmen oder einen eigenen Typ schreiben und für den alles vom Plus weg selbst implementieren.
 
oh ja sheel du hast natürlich recht das es kein sinn macht da weiter zu rechnen.

in dem anderen forum hat das auch schon jemand gepostet:

Im Prinzip müsste die Schleife so aufgebaut sein, als ob du alle 500 gefundenen Primzahlen prüfen willst. Nach dem fünften Fund (213-1 = 8191) kann jedoch schon abgebrochen werden.
Eine Rechnung von 23571-1 und die Auswertung, ob das Ergebnis eine Primzahl ist, kann nach wenigen Vorlesungen nicht gelöst werden (Stichwort BigInt).
 
Wir hatten erst ca. 10 Vorlesungen, wir sind noch gar nicht soweit um mit externen bibliotheken zu arbeiten.
Also kann man sagen mit unserem Wissenstand kann man die Aufgabe nicht 100% korrekt lösen!

Kannst du mir trozdem nochmal nen ansatz zeigen wie ich die ersten 500 primzahlen in nem array speichere um damit weiter zu rechnen.

P.S.: super kompetentes, schnelles und hilfsbereites forum - werd mich anmelden.
 
Wir hatten erst ca. 10 Vorlesungen, wir sind noch gar nicht soweit um mit externen bibliotheken zu arbeiten.
Also kann man sagen mit unserem Wissenstand kann man die Aufgabe nicht 100% korrekt lösen!

Wenn wir die Aufgabe richtig verstanden haben, ja.

Kannst du mir trozdem nochmal nen ansatz zeigen wie ich die ersten 500 primzahlen in nem array speichere um damit weiter zu rechnen.

C++:
#include <stdio.h>
#include <stdlib.h>

char pr_feld[5000];  //Array der zu überprüfenden Zahlen (nur für 1/0 reicht char auch)
int i;              //Zählvariable
int j;              //Funktionsinterner Zähler

int primzahlen[500];//Neu
int primanzahl;//Ersatz für iii
 
int main(void)
{  
    for(i=0;i<5000;i++)pr_feld[i]=0;
    primanzahl=0;

    //Sieb des Eratosthenes
    for(i=2; i <= 5000; i++) 
    {
        if(!pr_feld[i])
        {
            primzahlen[primanzahl]=i;//Statt ausgeben abspeichern, ausgeben kann man danach extra
            primanzahl++;
            if(primanzahl>=500)break;
            
            for(j = 1;(j*i) <= (sizeof(pr_feld)/sizeof(char));++j) 
            {
                pr_feld[(j*i)] = 1;
            }
        }
    }

    //Jetzt ausgeben
    for(i=0;i<primanzahl;i++)printf("%d\t",primzahlen[i]);
    system("Pause");
    return 0;
}

P.S.: super kompetentes, schnelles und hilfsbereites forum - werd mich anmelden.

Willkommen bei tutorials.de :D
 
Zuletzt bearbeitet:
Zurück