Wie funktioniert der Kiebart-Kamm? 
 

Der Kiebart-Kamm ist ein alternatives Verfahren zum Sieb des Eratosthenes um die Nichtprimzahlen innerhalb eines vorgegebenen Zahlenbereichs zu markieren. Genau wie beim Eratosthenes-Sieb sind die nicht markierten Zahlen die Primzahlen. 

Der Vorteil beim Kiebart-Kamm liegt darin, dass jede Nichtprimzahl genau einmal (und nicht mehrfach) markiert wird. Dadurch gewinnt dieses Verfahren enorm an Geschwindigkeit. Dass dies so ist, zeigt ein Rechenbeispiel mit 1.000.000.000 Zahlen. In diesem Bereich sind ca. 50 Millionen Primzahlen enthalten. Markiert werden müssen also mindestens 950 Millionen Zahlen. Wenn dies, wie mit dem Kiebart-Kamm allein durch das Verfahren gelingt, hat man das Optimum erreicht und kann dies nur noch dadurch toppen, dass man das Markierungsverfahren so ändert, dass die 50 Millionen Primzahlen statt der 950 Millionen Nichtprimzahlen markiert werden. Sascha Pfaller benötigt für sein Verfahren ebenfalls nicht so viele mehrfache Markierungen wie der ehrwürdige Eratosthenes. Das Sieb vom Eratosthenes streicht zum Beispiel die NichtPrimzahl  323.323 = 7 x 11 x 13 x 17 x 19 exakt 5 mal (Dies ist ein Extremfall). Aber auch dieses Sieb hat Optimierungsmöglichkeiten und kann zumindest theoretisch sogar bis zum Kiebart-Kamm optimiert werden, der ja - ich wiederhole mich - jede Nichtprimzahl nur einmal trifft.

Erklärungen zum Kiebart-Kamm:

Wir gehen davon aus, dass beim Start des Kämmens alle Zahlen >1 Primzahlen sind. Die erste Primzahl ist dann die 2 und die folgende Primzahl die 3. Wir streichen das Produkt (6 = 2*3) und kennzeichnen die 6 als Nicht-Prim.

Wir werden sehen, dass die Quadratzahlen im ersten Siebschritt eine besondere Bedeutung einnehmen und teilweise als Primzahlen erhalten bleiben. Aber - keine Sorge - diese Unzulänglichkeit wird im 2. Schritt wieder wettgemacht.

Beim Streichen des nächst möglichen Produkts (Primzahl 2 * "Primzahl" 4) streichen wir die 8. Dann 2*5 =10 

2*6=12 wird nicht durchgeführt, da 6 als Nicht-Prim entlarvt wurde. Hinweis: Dies wird später durch 3*4 gemacht.

Wir fahren mit folgenden Streichungen fort: 2*7; 2*9; 2*11; 2*12; 2*13 usw.

Viele - aber nicht alle - der geraden Zahlen wurden nun bereits entfernt und damit als Nicht-Prim markiert. 

Nun wiederholen wir in einer Schleife das Verfahren für die nächste Primzahl (3) und starten mit dem Produkt 3*4. Zur Erinnerung: 4 gilt immer noch als Primzahl! - Wir streichen also die 12

Danach 3*5; 3*7 (6 ist keine Primzahl mehr - Sie wurde im 1. Durchlauf gestrichen; ebenso die 8); 3*9; 3*11; Da die 12 just entfernt wurde, folgt: 3*13; 3*16 usw. für alle 3er-Produkte mit "Noch-Primzahlen"

Die nächste Schleife ist der (noch nicht gestrichenen) 4 gewidmet. Auch die 4 wird mit mit allen folgenden Noch-Primzahlen multipliziert und die Produkte gestrichen: 4*5; 4*7; 4*9; 4*11 usw.

Die 5er-Schleife startet mit 5*7; 5*9; 5*11; 5*13; 5*17

Da die 6 keine Primzahl mehr ist, folgt die 7er-Schleife usw......

Das Resultat aller Schleifen ist ein Primzahlenblock, der aber noch Quadratzahlen enthält. Diese werden im letzten Schritt entfernt.

------------------------------------------------------------------------------------------------------------

Optimieren kann man das Verfahren des Kiebart-Kamms folgendermaßen:

Man entfernt vorab alle durch 2, 3, 5 teilbare Zahlen aus dem zukünftigen Primzahlenblock und erhält eine Liste von 8 Zahlen:

1; 7; 11; 13; 17; 19; 23; 29

Dieses 30er-Muster (2*3*5=30) wiederholt sich im gesamten Primzahlenblock, indem man ein beliebiges Vielfaches von 30 hinzuaddiert.

Optimiertes Verfahren Kiebart-Kamm.

Die 1 wird als Nicht-Prim markiert!

1. Primzahl ist nun die 7, 2. Primzahl die 11

7*11 = 77 wird gestrichen, ebenso 7*13; 7*17; 7*19; 7*23; 7*29; 7*31; 7*37 usw. Mit dabei ist auch 7*49!!! und 7*121

Es folgt die Schleife für 11, die bei 11*13 startet.

Am Schluss werden wieder die Quadratzahlen entfernt.

Die drei Primzahlen 2, 3, 5 sind nicht gespeichert und müssen gesondert behandelt werden. Bei der Speicherung empfiehlt sich eine 8Bit-Speicherung pro 30er-Zahlenblock. So lässt sich eine große Menge an Primzahlen auf kleinstem Raum speichern.

------