Ich habe eben auch nochmal einen neuen Code nach dem SIEB DES ERATOSTHENES geschrieben:
für 10 Mio testzahlen braucht mein Code etwa 0,65 Sekunden (ohne speichern)
Delphi-Quellcode:
procedure SavePrimes(MaxPrime: Cardinal; const FileName: String = '');
var
isPrime: Array of Boolean;
Wurzel, i, j: Cardinal;
SL: TStringList;
begin
SetLength(isPrime, MaxPrime+1);
FillChar(isPrime[2], Length(isPrime)-2, 1);
Wurzel:=Trunc(Sqrt(MaxPrime));
for i:=2 to Wurzel do
if isPrime[i] then begin
j:=i*2;
while j<=MaxPrime do begin
isPrime[j]:=False;
Inc(j, i);
end;
end;
if FileName<>'' then begin
SL:=TStringList.Create;
for i:=2 To MaxPrime do
if isPrime[i] then
SL.Add(IntToStr(i));
SL.SaveToFile(FileName);
SL.Free;
end;
end;