Dieses Script erstellt eine Primzahlenliste mithilfe des
Siebverfahrens von Eratosthenes. Dies beruht darauf, daß alle echten Vielfache
natürlicher Zahlen (das sind alle Vielfache größer als die Zahl selbst) keine Primzahlen sein können,
da sie ja diese Zahl als Teiler haben.
Das Script geht in vier Schritten vor:
- Zunächst wird eine Liste A möglicher Primteiler für den gewünschten
Zahlenbereich erstellt. Wenn beispielsweise die Primzahlen zwischen 50000 und 60000 gesucht werden, können
nur Teiler bis zur Wurzel der Obergrenze √60000 = 244,94..., also bis 244 auftreten,
also {2, 3, 4, 5, ..., 244}.
- In dieser Liste werden nacheinander alle echten Vielfachen von 2, also {4, 6, 8, ..., 244},
gestrichen, dann die verbliebenen echten Vielfachen von 3 {9, 15, 21, ..., 243}, von 5, von 7 – und so fort.
Zahlen über √245 = 15,65... können nach Streichen aller
kleineren Faktoren schon keine echten Vielfachen mehr haben. Dadurch geht dieser Vorgang auch bei hohen Bereichsgrenzen
ziemlich schnell.
A ist damit eine Liste möglicher Primfaktoren des gewählten Zahlenbereichs.
- Nun wird eine Liste B möglicher Primzahlen im gewählten Bereich erstellt. Gerade Zahlen können hier schon
ausgeschlossen werden. (Theoretisch natürlich auch die Vielfachen von 5, dadurch könnte
aber der Schritt 4 nicht so ablaufen. Praktischerweise wird nämlich gar keine Liste der Zahlen selbst erstellt, sondern
nur eine Blankoliste, in der im nächsten Schritt eingetragen wird, ob eine Zahl keine Primzahl ist. Man braucht
dazu eine einfachen Zuordnung zwischen gemeinter Zahl und Listenindex.
Dann benötigt man im Grunde nur ein Bit pro Zahl.)
- Zuletzt streicht man in B nacheinander alle Vielfachen von A. Dies erfolgt über die Indizes der Liste, d.h.
bei allen Elemente in B, die zu Vielfachen von Elementen aus A gehören, wird das Bit gesetzt, die übrigen Bits
bleiben ungesetzt.
Schließlich sind in Liste B nur noch diejenigen Elemente unmarkiert, die zu Primzahlen gehören.
© Arndt Brünner, 26. 3. 2005
Version: 26. 3. 2005