Wir haben einen hatten Paar von Herausforderungen über die Ulam Spirale. Aber das reicht nicht.
In dieser Herausforderung zeichnen wir eine dreieckige Ulam-Spirale (im Gegensatz zur üblichen quadratischen Ulam-Spirale). Hier ist eine Skizze, wie die Spirale aussieht.
Wie wir wissen, ordnet die Ulam-Spirale alle natürlichen Zahlen in einer äußeren Spirale an und markiert nur diejenigen, die Primzahlen sind. In der obigen Skizze werden also nur die Zahlen angezeigt, die in Schwarz (die Primzahlen) erscheinen.
Die Herausforderung
Akzeptieren Sie eine Zahl N als Eingabe und zeigen Sie die dreieckige Ulam-Spirale bis zu dieser Zahl an.
- Die Eingabe kann stdin oder ein Funktionsargument sein.
- Die Spirale sollte sich in die positive Richtung drehen (dh gegen den Uhrzeigersinn), wie in der obigen Abbildung.
- Jede der 120-Grad-Kurven der obigen Abbildung wäre gültig, und die Kurve kann für verschiedene Eingaben unterschiedlich sein. Die unterste Seite der implizierten Dreiecke sollte jedoch horizontal sein, da die einzigen zulässigen Windungen (Vielfache von) 120 Grad sind.
- Der Code sollte theoretisch (bei genügend Zeit und Speicher) für alle N ausgeführt werden, bis zu dem, was von Zwischenberechnungen, die Sie mit Ihrem Standarddatentyp durchführen, zugelassen wird.
double
ist genug; Keine Notwendigkeit für große Integer-Typen. - Alle eingebauten Funktionen erlaubt.
- Ich werde meine eigene Antwort nicht akzeptieren (nicht, dass ich denke, es wäre sowieso die kürzeste ...).
Ausgabeformate
Wählen Sie eine der folgenden Möglichkeiten.
Zeigen Sie ein Diagramm mit einem Marker (Punkt, Kreis, Kreuz, was auch immer Sie bevorzugen) an Primzahlen und nichts an Nicht-Primzahlen an. Der Maßstab muss für beide Achsen nicht identisch sein. Das heißt, die implizierten Dreiecke müssen nicht gleichseitig sein. Achsen, Gitterlinien und Achsenbeschriftungen sind optional. Es werden nur die Marker bei den Primzahlen benötigt.
Eine Beispielausgabe für N = 12 wäre wie folgt (vergleiche mit der obigen Skizze). Das zweite Diagramm ist ein interessanteres Beispiel, das N = 10000 entspricht.
- Erstellen Sie eine Bilddatei mit dem oben genannten Format in einem bekannten Bildformat (z. B. png, tiff, bmp).
Zeigen Sie die Spirale als ASCII-Grafik an , wobei Sie ein einzelnes Zeichen Ihrer Wahl für Primzahlen und ein Leerzeichen für Nicht-Primzahlen verwenden und ein Leerzeichen, um die Nummernpositionen in derselben Zeile zu trennen. Führende oder nachfolgende Leerzeichen oder Zeilenumbrüche sind zulässig. Zum Beispiel wäre der Fall N = 12 mit
o
als Zeicheno · · · o · o · · · o · o
Wobei natürlich nur die
o
Markierung bei Primzahlen tatsächlich angezeigt würde. Die·
bei Nicht-Primzahlen ist hier nur als Referenz gezeigt.
Gewinnkriterium
Die eigentliche Belohnung ist es, sich selbst von diesen erstaunlichen Mustern zu überzeugen.