Erzeugen eines Ulam Spirale - Mathematica Stapelaustausch
Eine Ulam Spirale ist eine ziemlich interessante Konstruktion, unerwartete Eigenschaften in der Verteilung der Primzahlen enthüllt.
Ich habe eine schnellere Implementierung erstellt, aber ich glaube, es ist sicher beschleunigt werden kann:

Das ist gut genug für meine Zwecke, und ich habe keine Zeit auf dem jetzt zu konzentrieren, könnte es jedoch für zukünftige Besucher interessant sein, so ist die Frage, wie man es macht schneller durch die Verbesserung / neu zu schreiben.
Juni fragte 9 '14 um 14:17 Uhr
Die Funktion findPrimePosInBoundarys findet unten heraus, welche Primzahlen sind, auf dem Platz und wo sie sind auf solche Plätze. Die Koordinate ist nur für eine ganze Zahl und layer = 3. Die Koordinaten zeigen folgende Positionen.
Er tut dies, für jede Schicht<=layers
Im Folgenden finden Sie eine kompilierte Funktion. Angesichts der Positionen auf dem Platz, und welcher Schicht arbeiten wir an, es wandelt diese ganzzahlige Position in eine Koordinate.
Die Funktion unten bildet die kompilierte Funktion über die Schichten
Hier ist eine Funktion, um das Ergebnis anzuzeigen

Für einen größeren Wert von Schichten. wir haben
Hier ist meine Version Join statt Insert mit der Spirale der Zahlen zu bauen. Durch meine Messungen ist es die schnellste Methode für die kleinere Spirale von 200 Schichten, nimmt 0,025 Sekunden bis 0.046, um eine vollständige verglichen mit Kubas Code und 0.055 mit Jakobs-Code. Aber Jakobs Lösung gewinnt die Hände mit 1001 Schichten auf die größeren Spirale nach unten. Dieser Test dauert nur 1,14 Sekunden für Jakobs-Code, während es 56 Sekunden für Mine dauert und 115 Sekunden für Kuba.
Hier ist ein Test mit so vielen Schichten wie in Kuba dem Beispiel (die Visualisierung ist mit einer Schicht mehr).

(Nebenbei für zukünftige Besucher:.. // Bild // ColorNegate ist schneller als ArrayPlot wenn Sie jeden Aspekt des Problems optimieren wollen)
Eine Verbesserung meines Codes, die ich kenne, aber nicht realisieren ist, dass Bereichsnummern in umgekehrter Reihenfolge auflisten können durch eine negative Schrittweite aufweist. Dies könnte anstelle von Reverse verwendet werden.
Juni beantwortet 9 '14 um 22:41 Uhr