Moin an alle Denker, das Programm arbeitet nur mit den ungeraden Zahlen.
Jede Zahl wird durch ein Bit(32) repräsentiert.
Die Manipulation erfolgt mit den Funktionen
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function TPrimZahl.TestBit(Zahl:Cardinal;BitNr:Byte):Boolean; begin TestBit:=(((Zahl shr BitNr) and 1)=1) end;
function TPrimZahl.SetBit(Zahl:Cardinal;BitNr:Byte):Cardinal; begin SetBit:=Zahl or (1 shl BitNr) end;
function TPrimZahl.ClrBit(Zahl:Cardinal;BitNr:Byte):Cardinal; begin ClrBit:=Zahl and not(1 shl BitNr) end;
for i:=1 to SiebMax do Sieb[i]:=$FFFFFFFF; Wurzel:=trunc(sqrt(an/2+0.25)-0.5); |
Der Test mit Primzahlen bis 200.000.000 ergibt 11.078.937 Primzahlen in 3,53 sek.
Der Test mit Primzahlen bis 500.000.000 ergibt 26.355.867 Primzahlen in 9,83 sek.
Mit dem Verfahren nach Atkin dauert das Suchen 31,13sek.
Mein PC ist getaktet mit 3,19GHz
Diese Variante entstand zu DOS-Zeiten mit der 64K-Grenze(8-Bitversion)
Viel Spaß beim Studieren des Quelltextes
Gruß Fiete
Anlage: alle ungeraden Zahlen bis 100
1 3 5 7 9 11 13 15 17 19
21 23 25 27 29 31 33 35 37 39
41 43 45 47 49 51 53 55 57 59
61 63 65 67 69 71 73 75 77 79
81 83 85 87 89 91 93 95 97 99
Edit1: neue Version liegt vor