tag auch
ich befasse mich jetzt auch schon etwas länger mit primzahl berechnung/ findung.
WEgen der unglaublichen schnelligkeit wollte ich jetzt mal fragen wie viel hz dein rechner hat?
meiner hat bescheidene 392mhz und schaft mit meinem code in sechs sekunden 120.000 primzahlen zu finden.
Code:
procedure tprimzahlen.findeprimzahlen;
var lauf: int64;
//laufzwei: integer;
wurzelderletztenprz : extended;
begin
repeat
lauf:= 2;
wurzelderletztenprz:= sqrt(speicherarray[anzahlprimzahlen]);
repeat
hilf:= speicherarray[lauf];
inc(lauf);
if zahl mod hilf = 0 //zahl ist keine primz weil sie einen teiler hat
then begin
zahl:= zahl + 2; //hier passiert das gleiche wie wenn es eine primzahl wäre
lauf:= 2; //bloß das keine zahl geschrieben wird und die zahl damit übergangen wird
wurzelderletztenprz:= sqrt(speicherarray[anzahlprimzahlen]);
end
until hilf -1 > wurzelderletztenprz; //brauch nur bis zur hälfte danach ists sinnlos
inc(anzahlprimzahlen);
speicherarray[anzahlprimzahlen]:= zahl;
application.ProcessMessages;
zahl:= zahl + 2;
until stop = true;
end;
verlangsamt wird bei mir die ganze sache durch application.processmessages ohne die mein programm aber logischer weise nicht mehr aus der repeat-schleife käme.
p.s. kann es sein dass du nur überprüfst ob die zahlen durch zwei, drei und fünf teilbar sind?