rechne
Delphi-Quellcode:
var
Root,Steps,Counter:
begin
Root := N^0.5;
Steps := N / Root / 2 / 100;
Counter := Steps;
repeat
if Counter <= 0 then
begin
ProgressBar.Position := Root / Prime * 100;
Counter := Steps;
end;
Counter := Counter -1;
until ....
end;
oder so
Delphi-Quellcode:
var
Tick: Cardinal;
begin
Tick := GetTickCount + 250;
repeat
if GetTickCount >= Tick then
begin
Tick := GetTickCount + 250;
ProgressBar.Position := Prime / Root * 100;
ProgressBar.Update;
end;
until ...
end;
Im letzten Fall wird die ProgressBar nur 4 mal pro Sekunde = 250ms aktualisiert. Ich würde diese Methode vorziehen da sie die ProgressBar unabhängig vom eigentlichen Programmcode in einem exakten zeitlichen Interval aktualisert.
Ansonsten solltest du mit NIsProbablePrime(N) VOR jeder Trial Divison auf Prim überprüfen (aber nur bei großem N -> NSize(N) > 32).
NIsProbablePrime() soll laut Pomerance (anerkannter Mathematiker) erst bei Zahlen größer 10^1000 eine Falschantwort liefern. Pomerance hat ein Preisgeld ausgesetzt für denjenigen der als erster eine Zahl findet bei dem sein Primzahltest diese Zahl als Primzahl ausweist obwohl es keine ist. Das ist bei Pseudo-Primzahl-Tests immer eine Wahrscheinlichkeit, weshalb es eben nur ein Pseudo-Primzahl-Test ist. Bisher hat noch kein Mensch eine solche Zahl gefunden, Pomerance sitzt also noch auf seinem Preisgeld.
Gruß Hagen