Erstellen wir ein N × N-Raster aus Leerzeichen und Unterstrichen, mit dem visuell festgestellt werden kann, ob eine Zahl eine Primzahl ist. (N kann eine beliebige positive ganze Zahl sein.)
Dieses Raster hat drei einfache Regeln:
- Die n-te Spalte enthält das wiederholte Muster von n-1 Unterstrichen, gefolgt von einem Leerzeichen. Dieses Muster beginnt in der ersten Zeile und endet möglicherweise in der Mitte der Zeile N. (Zeilen und Spalten sind 1-indiziert.)
- Die erste Spalte wird durch alle Unterstriche anstelle aller Leerzeichen ersetzt.
- Wenn irgendwo ein Leerzeichen vorkommt, entspricht der Zeilenindex dem Spaltenindex und wird durch einen Unterstrich ersetzt.
Beispiel: N = 10
1
1234567890 <-- column indices
1__________
2__________
3__________
4_ ________
5__________
6_ _______
7__________
8_ _ ______
9__ _______
10_ __ _____
^ row indices
Die Indizes dienen nur der Übersichtlichkeit. Das einfache Raster selbst (was Ihr Programm ausgeben muss) ist:
__________
__________
__________
_ ________
__________
_ _______
__________
_ _ ______
__ _______
_ __ _____
Beachte das:
- Die erste Spalte enthält alle Unterstriche.
- Die zweite Spalte enthält Unterstrich, Unterstrich usw., mit Ausnahme des Unterstrichs in Zeile 2.
- Die dritte Spalte enthält Unterstreichungszeichen, Unterstreichungszeichen usw., mit Ausnahme des Unterstreichungszeichens in Zeile 3.
- etc.
Beachten Sie außerdem, dass außer 1 nur Zeilen mit Primzahlen in jeder Spalte Unterstriche aufweisen.
Da sich Unterstriche über die gesamte Schriftbreite erstrecken, bildet jede Zeile mit Primzahlen eine durchgehende durchgezogene Linie. Es ist also visuell recht einfach zu überprüfen, ob eine Zahl eine Primzahl ist oder nicht. Überprüfen Sie einfach, ob die Linie in allen Spalten durchgehend ist. (Tatsächlich reicht ein Blick auf die Quadratwurzel des Zeilenindex aus, aber die Ausgabe dieses Rasters erscheint weniger elegant.)
Programm
Schreiben Sie ein Programm, das diese Gitter mit N über stdin (oder die nächstliegende Alternative) zeichnet. Die Ausgabe erfolgt nach stdout (oder nach der nächstgelegenen Alternative) und sollte nur Leerzeichen, Unterstriche und Zeilenumbrüche mit einer optionalen nachgestellten Zeile enthalten.
Der kürzeste Code gewinnt.
nMachen Sie für die th-Zeile das kth-Zeichen zu einem Leerzeichen, wenn kes sich um einen Teiler mhandelt, der nicht 1 oder ist m.
