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

Hilfe
Neues Thema
Antworten

Nach oben


