Ich hab auf Grundlage einer leicht optimierten Version des Siebes Eratosthenes ein Programm zum berechnen der ersten n Primzahlen geschrieben. Naturgemäß geht das mit int nur bis 2^31. Also habe ich int einfach durch long long ersetzt, aber jetzt stürzt das Programm einfach ab... Was könnte der Fehler sein?
#include <iostream> #include <vector> #include <ctime> using namespace std; int main(){ long long prim, i, n, m, Anzahl=0, p=1; clock_t start, end1, end2; cin>>prim; start = clock(); vector <bool> sieb(prim, 1); while((p*p) <= sieb.size()){ for(i = 1; sieb[p+i] != 1; ++i){ if( (p + i) <= sieb.size()) break;} p = p + i; for(n = p; n*p <= prim; n++){ sieb[n*p] = 0;} } end1 = clock(); for(m = 2; m <= sieb.size(); m++){ if(sieb[m]){ //cout<<m<<endl; Anzahl = Anzahl + sieb[m];}} end2 = clock(); cout<<Anzahl<<" Primzahlen "<<end1-start<<"ms "<<end2-end1<<"ms"<<endl; cin.get(); cin.get();}
Dieser Beitrag wurde von Bockfett bearbeitet: 02. Juli 2012 - 15:01