probier mal:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var counter: TCounter; i,j: Cardinal;
begin
counter:=TCounter.Create(RealTime);
i:=primes.IndexOf(1, True);
j:=primes.IndexOf(500000000, False);
// for i:=i to j do
// primes[i];
caption:=floattostr(counter.Stop);
counter.Free;
end;
Die tatsächliche "Umrechnung" der Bitarrays[] mit Primes[i] ist irrelevant, da die Bitarrays[] intern schon alle Informationen welche Zahlen Primzahlen sind enthalten.
Benutzt du wie in deinem Beispiel .Indexof(5Mio) UND .Primes[i] so misst du die Laufzeit des Algos. ZWEIMAL !
Also entweder so:
Delphi-Quellcode:
StartCounter;
Primes.IndexOf(5Mio, False);
StopCounter;
was absolut ausreichend ist da die Bitarrays[] intern nur eine andere Darstellung der Primzahlen sind.
Oder so:
Delphi-Quellcode:
StartCounter;
I := 0;
while Primes[i] < 5000000 do Inc(I);
StopCounter;
alles andere wäre sozusagen unfair da du zweimal die Laufzeit des Algos misst.
Gruß Hagen