Hallo zusammen
Mein Problem: Ich hab mir zum spass ein Sieb des Eratosthenes programiert(Primzahlen berechnung). Nun leider kann ich das array nicht grösser als 2mio bool Variablen machen weil es sonst zu einem Segment Fault kommt. nun meine Frage wie kann man das ändern der Code hier:
Vielleich könnte man ein Array of Array of Boolean machen like
Müsste dann den Algo umschreiben(Ich danke für Tipps) aber dass möchte ich möglichst mal umgehen. Ach ja ich hab das Programm als C++ Projekt übersetz mit Dev-C++. Und ich benütze WinXP.
Danke für alle Antworten
Mein Problem: Ich hab mir zum spass ein Sieb des Eratosthenes programiert(Primzahlen berechnung). Nun leider kann ich das array nicht grösser als 2mio bool Variablen machen weil es sonst zu einem Segment Fault kommt. nun meine Frage wie kann man das ändern der Code hier:
Code:
#include <time.h>
#include <stdio.h>
#include <math.h>
#define N 2000000
int suchkleinsteprim(bool *prima, int prim)
{
int i;
for(i=prim;i<=N;i++)
{
if(prima[i]==true) return i+1;
}
}
void streiche(bool *prima)
{
int prim=1,i;
while(prim<sqrt(N))
{
prim=suchkleinsteprim(prima,prim);
for(i=(prim*prim)-1;i<=N;i+=prim)
{
prima[i]=false;
}}}
void ausgabe(const bool *prima, FILE *datei)
{
int i;
for(i=0;i<N;i++)
{
if(prima[i]==true)fprintf(datei,"%d\n",i+1);
}}
int main(void)
{
bool primarray[N-1];
FILE *datei=fopen("prim.txt","w+");
clock_t prgstart, prgende;
int i,grenze;
prgstart=clock();
for(i=0;i<N;i++) primarray[i]=true;
primarray[0]=false;
streiche(primarray);
ausgabe(primarray,datei);
prgende=clock();
printf("%.3f",(float)(prgende-prgstart)/CLOCKS_PER_SEC);
getchar();
return 0;
}
Vielleich könnte man ein Array of Array of Boolean machen like
Code:
bool[10][2000000];
Danke für alle Antworten
Zuletzt bearbeitet: