Ich habe mir mal deinen Primzahltest angeschaut, der ist aber vergleichsweise langsam.
Delphi-Quellcode:
function Prim(Value: Cardinal): Boolean;
var
i : Cardinal;
begin
if Value = 2 then Result := True
else
begin
Result := False;
for i := 2 to Trunc(Sqrt(Value)) + 1 do
begin
if Value mod i = 0 then
begin
Result := False;
Break;
end
else Result := True;
end;
end;
end;
Ich würde ihn so schreiben.
Delphi-Quellcode:
function Prim(Value: Cardinal): Boolean;
var
i : Cardinal;
begin
Result := false;
if (Value<=1) or ((Value mod 2=0) and (Value<>2)) then
exit;
Result := true;
if Value=2 then exit;
i := 3;
while i<=Trunc(Sqrt(Value)) + 1 do
begin
if Value mod i = 0 then
begin
Result := false;
exit;
end;
Inc(i, 2);
end;
end;
Ich weiß, dass es bestimmt noch Methoden gibt diese Funktion zu verschnellern, aber meine ist schon mal bei großen Zahlen fast doppelt so schnell, da sie in 2er-Schritten zählt.