C Quelltext: http://pastebin.com/YzChJUjA (Wer es schöner haben möchte...)
Wer mag kann ja testen und dann sagen wieviele er in wieviel zeit gefunden hat.
[Blockierte Grafik: http://bktm.ron-welzel.de/Download/C/Primzahlen/primzahlen_2_999999999.png]
Spoiler anzeigen
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <limits.h>
#define DATENTYP unsigned long int
short eratosthenes(char *nListe, DATENTYP nGrenze)
{
unsigned long long i, nPrimteiler = 2, q;
if (nGrenze < 2) return 0;
for (i = 2; i < nGrenze; i++)
{
nListe = 1;
}
while (nPrimteiler*nPrimteiler < nGrenze)
{
q = 2;
while (q*nPrimteiler < nGrenze)
{
nListe[q*nPrimteiler] = 0;
q++;
}
do
{
nPrimteiler++;
} while (nListe[nPrimteiler] == 0);
}
return 1;
}
double get_time()
{
LARGE_INTEGER t, f;
QueryPerformanceCounter(&t);
QueryPerformanceFrequency(&f);
return (double)t.QuadPart / (double)f.QuadPart;
}
int main(int nArgs,char **szArgs) {
DATENTYP nAnzahl = 999999999, i, nCounter = 0;
short bIsOk = 0;
double dStart,dEnd;
char *pnListe = (char*)malloc(nAnzahl * sizeof(char));
dStart = get_time();
bIsOk = eratosthenes(pnListe, nAnzahl);
dEnd = get_time();
if (bIsOk == 1)
{
for (i = 2; i < nAnzahl; i++)
{
if (pnListe == 1)
{
//printf_s("%i ist eine Primzahl.\n", i);
nCounter++;
}
}
}
printf_s("\n%lf Sekunden um von 2 bis %u Primzahlen zu finden.\nGefundene Primzahlen: %u\n\n", dEnd - dStart, nAnzahl, nCounter);
free(pnListe);
}