nach oben

Archimedische Ulam-Spirale

(oder Philipps-Stern)

Philipp Gressly Freimann - Feb. 2018

Punkte in einer Ebene mit sichtarem unregelmäßigem MusterQuadrate im Kreis
Ulam SpiralePhilipps-Stern - 2018 - St. Moritz

Zusammenfassung

Beim Betrachten der Ulam Spirale (Stanislav Ulam) fällt auf, dass die Zahlen in einem Rechteck bzw. in einem Quadrat angeordnet sind. Zahlen sind also nicht notwendigerweise weiter weg vom Ursprung, wenn sie größer sind.
Dieser Umstand kann gebrochen werden, indem Zahlen auf einer Archimedischen Spirale aber immer noch in quadratischen Kästchen (Häuschen) aufgefädelt werden. Dazu wird auch im Nullpunkt begonnen, aber so spiralförmig nach außen gefahren, dass eine größere Zahl niemals den kleineren euklidischen Abstand zum Mittelpunkt hat, als eine kleinere Zahl.

Beobachtungen

Beim Betrachten der ersten Ergebnisse, scheint nichts spezielles aufzufallen. Die Primzahlen im Bild oben rechts sind gelb dargestellt. Wie bei Primzahlen zu erwarten, lümmeln sie so ziemlich zufällig in der Gegend herum. Dies war auch zu erwarten, denn einige Abstände (wie z. B. Der Abstand fünf) kommen wegen den Pythagoräischen Zahlentrippeln mehrfach vor und machen so jegliche Symmetrie kaputt.

Beim untersuchen von mehreren Millionen Zahlen, hat sich jedoch ein erstaunliches Muster gezeigt:

Kreis mit vielen Punkten

Dabei (Bild) sind die gelben Punkte Primzahlen. Die violett bis blauen Punkte haben mehr als 2 Teiler. Je mehr Teiler eine Zahl hat, umso blauer wurde sie dargestellt.
Auffallend sind die acht radialen Anhäufungen (aber gleichzeitig auch Ausdünnungen) von Primzahlen bei 0⁰, 45⁰, 90⁰, 135⁰, 180⁰, 225⁰, 270⁰ und 315⁰.

Wie die originale Ulam-Spirale ist auch der Philipps-Stern invariant gegenüber der Startzahl. Es scheint hier eine Anhäufung von Vielfachen vor den eben benannten Winkeln zu geben. Mit vor meine ich die mathematisch positive Richtung; also um ca. 345-355⁰, 30-40⁰, etc.

Berechnung

Begonnen wird beim Philipps-Stern in der Mitte mit dem Wert Null oder Eins (die folgende Skizze beginnt bei 0). Beachte die Zahlen 1, 2, 3 und 4, welche den Abstand 1 zum Mittelpunkt aufweisen. Die nächsten Zahlen (5, 6, 7 und 8) haben den Abstand Wurzel aus 2 zum Mittelpunkt. Es folgen 9, 10, 11 und 12 mit Abstand 2 und so weiter.
Ist ein Abstand aufgebraucht, so wird nicht nur der nächste Abstand gesucht, sondern es wird im Gegenuhrzeigersinn (mathematisch positive Richtung) gleich mit der nächsten Zahl weitergemacht. Dadurch entsteht eine Spirale, die der Idee der archimedischen Spirale nahe kommt.

Zahlen im Raster

Legende: In der Mitte beginnt dieser Philipps-Stern mit der Zahl Null. Die Primzahlen sind grün markiert. Die kleinen Punkte in den anderen Feldern zeigen die Anzahl Teiler - so hat z. B. die Zahl 21 vier Teiler.

Erste Betrachtung der Vielfachen von 2, 3, 5, und 7

Mein Sohn Valentin hat mich darauf aufmerksam gemacht, ich solle mal die Vielfachen von zwei betrachten. Gerhard Wanner hat mir vorgeschlagen, einmal anstelle von Primzahlen eine Zufallsverteilung von 1/ln(n) zu verwenden. Ich habe im folgenden einige Beispiele mit Radius 370 durchgeführt. Dies entspricht etwa 430'000 Zahlen.

Der Primzahlstern

Zuerst (Bild Oben) zeige ich nochmals den Stern und verwende hier die Selben Farben und Größen, wie in den folgenden Vergleichsbildern.

Reine Verteilung

Obiges Bild enthält keinerlei Symmetrien. Einzig ist es im linken bereich etwas unscharf, dies kommt jedoch daher, dass die "Pixel" (picture elements) im Bildschirm teilweise auf- bzw abgerundet wurden und somit "verschwimmen". Die Zahlen wurden wie folgt als "zufällig Prim" gewählt:

					invln: real;
					invln := 1.0 / ln(value);
					"zufällig prim" :=  random(0.0, 1.0) < invln;
																								 

Wie zu erwarten, zeigt sich keine Struktur, außer, dass in der Mitte die Zahlen gehäuft auftreten. Die Zahlen sind zwar etwa gleich häufig wie Primzahlen, jedoch an ganz anderen Stellen.

Vielfache von zwei (drei, fünf, sieben) wegfiltern

In obigem Bild habe ich lediglich die Vielfachen von zwei weggefiltert. Hier ist der Stern schon deutlich sichtbar. Es scheint so zu sein, dass die Vielfachen von zwei den Löwenanteil am Aussehen des Sterns beitragen. Wenn man hier genau hinschaut, sieht man auch bei Vielfachen von ca. 25⁰ deutliche schmale Strahlen. Diese verblassen, je mehr Teiler wir wegfiltern:

Im obigen Bild habe ich Vielfache von 2 und 3 weggefiltert. Weiter geht es mit zwei weiteren Vielfachen:

Obiges Bild dünnt noch weiter aus, hier habe ich Vielfache von 2, 3, 5 und 7 weggefiltert.

Gerade Zahlen wegfiltern, die anderen primverteilt

Eine letzte Betrachtung kam von Gerhard Wanner: Ich solle mal alle Vielfachen von zwei wegfiltern, bei allen anderen Zahlen jedoch zufällig wegfiltern aber mit der Wahrscheinlichkeit 1/ln(n). Es scheint nun tatsächlich so, dass die Vielfachen von zwei den Hauptanteil darstellen. Vielfache von 3, 5, 7 haben keine weitere Struktur hineingebracht:

Vergleichen wir nun obiges Bild (Vielfache von zwei wegfiltern und alle anderen Zahlen zufallsverteilt) mit dem original (unten):

Vielfache von 3

Tatsächlich scheint es sich nicht um eine Struktur der Primzahlen, sondern um eine Struktur der Anordnung der Vielfachen von zwei zu halten. Dies hat mich auf die Idee gebracht einmal nur die Vielfachen von 3 wegzufiltern:

Das obige Resultat (obiges Bild) zeigt deutlich eine zufällige Verteilung, wenn ich lediglich die Vielfachen von 3 wegfiltere. Eine Überlagerung mit dem Wegfiltern von Vielfachen von 2 ergibt natürlicherweise das erwartete, bereits beschriebene Bild:

Das stärkste Bild eines Stern hatten wir also beim Wegfiltern von Vielfachen von 2. Das obige Bild filtert nun Vielfache von zwei und drei weg. Ich habe viele Primzahlen einzeln weggefiltert, aber alle Bilder ergeben keinerlei Struktur. Somit stelle ich die Hypothese auf: Einzig die Vielfachen von zwei tragen zum Stern bei.

Was, wenn es kein geraden Zahlen gäbe?

Eine spannende Idee kommt wieder von meinem Sohn Valentin: Ich solle im Philipps-Stern nur ungerade Zahlen eintragen und danach anschauen, ob nicht etwa die geraden Zahlen den Löwenanteil am Muster ausmachen:

In obigem Bild kommen also nur ungerade Zahlen vor, dennoch wurden nur Primzahlen markiert. Das Stern-Muster scheint gänzlich verschwunden. Dies ist ein weiterer Hinweis dafür, dass nur die geraden Zahlen den Stern ausmachen. Dies ist umso klarer, da im gegebenen euklidischen Abstand auf einem quadratischen Raster immer eine gerade Anzahl Punkte liegen (sicher Vielfache von vier).

Gerade und ungerade «vertauschen»

Eine weitere Frage stellt sich, wie sich das Muster ändert, wenn wir anstelle von 1 (Eins) in der Mitte mit 0 (Null) beginnen. In der ursprünglichen Handskizze (oben) hatte ich ja mit 0 begonnen, einfach für einen Vergleich mit der Ulam-Spirale hatte ich die Eins genommen. Zum Glück spielt das keine entscheidende Rolle auf das Gesamtbild. Es zeigt jedoch einmal mehr, dass nur die geraden Zahlen zum Muster beitragen. Jeder Umdrehung in Philipps-Stern benötigt eine gerade Anzahl Punkte. Somit wird sich das Muster einfach umdrehen. Dies zeigt sich in den folgenden beiden Bildern, wo ich zunächst mit Eins und anschließend mit Null im Zentrum begann. Zunächst die Eins:

Bild oben: Starte mit 1 in der Mitte.

Nun starte ich in der Mitte mit Null:

Bild oben: Starte mit 0 in der Mitte.

Deutlich zu erkennen: Wenn im Zentrum mit 1 gestartet wird, sind die Primzahlen immer nach ("nach" im mathematisch positiven Sinne) den Diagonalen gehäuft; Wenn im Zentrum hingegen mit einer geraden Zahl gestartet wird, so sind die Primzahlen vor den Diagonalen häufiger. Ein weiterer Hinweis, dass lediglich die geraden Zahlen zum Muster beitragen.

Vergleich mit der Ulam-Spirale

Natürlich müssen wir Philipps-Stern auch mit der original Ulam-Spirale vergleichen:

In obigem Bild Ulams original Spirale, welche in der Mitte mit eins beginnt und im Gegenuhrzeigersinn alle zahlen im Rechteck aufreiht. Typisch sind Diagonale mit Anhäufungen von Primzahlen.

Teiler von 2, Teiler von 3

Wenn wir in der Ulam Spirale einmal nur gerade Zahlen wegstreichen, ist dies gänzlich uninteressant:

Obiges Bild wechselt strikt zwischen "prim" und "gerade" ab. Spannender vielleicht die Vielfachen von 3?

In obigem Bild wurden also nur die Teiler von 3 herausgefiltert. Auch dies ist noch sehr symmetrisch.

Natürlich haben wir auch mal Vielfache von 2 und 3 gleichzeitig herausgefiltert:

Auch dies ergibt ein reguläres Muster, was alleine durch die Anordnung erklärbar ist.

Schwieriger wird die Erklärung, wenn wir Vielfache von 2, 3, 5 und 7 wegfiltern:

Beim Wegfiltern von Vielfachen von 2, 3, 5 und 7 ergibt sich nun ein deutliches Muster von Diagonalen Linien. Jedes spätere Vielfache wird also aus diesen Diagonalen "löcher" herausstanzen.

Verteilung von Primzahlen

Wenn wir nun das Muster nehmen, wo alle Vielfachen von 2, 3, 5 und 7 weggefiltert sind, so stellt sich die Frage, was passiert, wenn wir nun weiter Primzahlen herausfiltern. Natürlich erhalten wir dann den Ulam-Stern. So habe ich mir erlaubt, Zahlen herauszufiltern, welche die selbe Wahrscheinlichkeitsverteilung wie Primzahlen aufweisen:

Und siehe da, die Diagonalen sind verschwunden. Sind sie das? Wer ganz flach über das Bild in Diagonalenrichtung schaut, wird bemerken, dass einige Diagonalenteile noch nicht ganz aufgelöst sind...

Auswertung

Wir haben gesehen, dass die Anordnung der Zahlen auf einem Rechteck (Ulam-Spirale) oder mit euklidischem Abstand (Philipps-Stern) eine wesentliche Rolle auf das Muster der Primzahlverteilung hat.

Wo bei Philipps-Stern die Vielfachen von 2 den Wesentlichen Ausschlag auf das Muster geben, so liefert bei Ulams Spirale das Wegfiltern von Vielfachen von 2, 3, 5 deutliche durchgehende Diagonalen welche lediglich an den 45⁰-Winkeln des Koordinatensystems Unregelmäßigkeiten aufweisen.

Das Wegfiltern von weiteren Vielfachen kann jedoch nur aus diesen Diagonalen Punkte entfernen, denn daneben sind ja schon von Anfang an weniger Punkte vorhanden.

Hexagonale Tests

Um die Ulam-Spirale zu "entzaubern", dachten wir (insb. Gerhard Wanner) an ein Hexagonales Muster. Zur hexagonalen Anordnung wurden bereits Tests gemacht: hexnet.org Es scheint also, als sei die Ulam-Spirale vorwiegend eine art optischer Täuschung, die nicht dadurch zustande kommt, dass auf gewissen Linien speziell mehr Primzaheln vorhanden wären, als dadurch, dass durch die regelmäßigkeit der teiler eben gerade nicht Primzahlen auf parallelen Linien "weggefiltert" werden.

Programmcode

Der Programmcode wurde in Java geschrieben und es hat mich einiges gekostet, den Code effizient zu gestalten. Nicht, weil Java eine langsame Sprache ist, sondern eher, weil ich für jede Zahl prüfe, wie viele Teiler sie hat.

Primzahlsieb erweitert (Effizienz)

Um die Anzahl einer Zahl Teiler zu ermitteln, gibt es diverse rasche Methoden. Wenn ich jedoch von jeder Zahl ihre Teiler benötige, so kann ich einfach das Primzahlsieb des Eratosthenes erweitern. Dazu habe ich zunächst alle Zahlen in ein Feld (Array) eingefüllt und zunächst mal wie folgt initialisiert (denn zwei Teiler haben ja alle Zahlen, mit Ausnahme von 0 und 1, welche beide aber hier keine Rolle spielen):

				0  1  2  3  4  5  6  7  8  9 10 11 12 13 ...
				0  1  2  2  2  2  2  2  2  2  2  2  2  2 ...
			

Danach habe ich bei allen Vielfachen von zwei eins dazugezählt ...

				0  1  2  3  4  5  6  7  8  9 10 11 12 13 ...
				0  1  2  2  3  2  3  2  3  2  3  2  3  2 ...
			

... danach bei allen Vielfachen von 3 je eins dazugerechnet...

				0  1  2  3  4  5  6  7  8  9 10 11 12 13 ...
				0  1  2  2  3  2  4  2  3  3  3  2  4  2 ...
			

... am Ende steht im Array an jeder Stelle die Anzahl Teiler der entsprechenden Indizes:

				0  1  2  3  4  5  6  7  8  9 10 11 12 13 ...
				0  1  2  2  3  2  4  2  4  3  4  2  5  3 ...
			

Dies dauert zwar etwas länger als das Primzahlsieb, doch so erhalte ich automatisch die Anzahl Teiler und kann so a) sofort sehen ob eine Zahl prim ist (sie hat 2 Teiler) und b) ich kann den Stern so kolorieren, dass ich die Zahlen anhand ihrer Teilerzahl in einem Verlauf einfärbe.

Viele Hilfsvariable kennzeichnen dieses Programm. Hier jedoch der wesentliche Ausschnitt, der zeigt, wie die Spirale aufgebaut wird:

		ArrayList sortiert = new ArrayList(quadratseite*quadratseite); 
		for(Zelle[] zArr: quadrat) {
			for(Zelle z: zArr) {
				sortiert.add(z);
			}
		}
		ZellenComparator zc = new ZellenComparator();
		sortiert.sort(zc);

		double aktWinkel =  0.0;
		int    nextAbst  =  0  ; 
		int    nextValue = this.startZahl; 

		int pruefeAb = 0;
		while(nextAbst >= 0 && nextAbst < kleinsterAbstandAusserhalb()) {
			ArrayList aktListe;
			aktListe = listeMitGegebenemAbstand(sortiert, nextAbst, pruefeAb);
			pruefeAb = pruefeAb + aktListe.size();
			sortByWinkel(aktListe, aktWinkel);
			for(Zelle z: aktListe) {
				z.setValue(nextValue++);
				if(z.anzahlTeiler() > maxTeilerzahl) maxTeilerzahl = z.anzahlTeiler();
				aktWinkel = z.winkel();
			}
			nextAbst = naechsterAbstand(sortiert, nextAbst, pruefeAb);
		}

			

Kontakt

Bei Fragen und Anregungen bitte mich gleich "An Philipp" kontaktieren.