Ich bin ein großer Fan der Zahlentheorie. Eine große Sache in der Zahlentheorie ist die modulare Arithmetik; Die Definition ist genau dann wenn . Eine lustige Sache ist es, die Potenzen zu erhöhen: besonders wenn der Modul eine Primzahl ist. Insbesondere wurde bewiesen, dass, wenn und relativ prim sind (außer keine gemeinsamen Faktoren teilen ), eine Zahl so dass .
Ich werde anhand eines Beispiels erklären, was die Übung ist. Nehmen wir einen Modul . Eine mögliche Ausgabe des Programms oder der Funktion wäre:
3 2 6 4 5 1
2 4 1 2 4 1
6 1 6 1 6 1
4 2 1 4 2 1
5 4 6 2 3 1
1 1 1 1 1 1
Jede Zeile ist eine Liste der Potenzen der ersten Zahl in dieser Zeile: Die erste Zeile ist , was Modulo . Die zweite Reihe des Quadrats oben ist die Potenz von usw. bis zur letzten Reihe, die nur Potenzen von .
Dies ist ein magisches Modulo-Quadrat, weil:
- Das Quadrat ist symmetrisch; Das heißt, die te Spalte ist dieselbe wie die te Zeile.
- Alle Werte bis erscheinen mindestens einmal.
Unten ist die einzige andere gültige Ausgabe für , beginnend mit Potenzen von :
5 4 6 2 3 1
4 2 1 4 2 1
6 1 6 1 6 1
2 4 1 2 4 1
3 2 6 4 5 1
1 1 1 1 1 1
Die Herausforderung
Erstellen Sie eine Funktion oder ein Programm, bei dem eine Primzahl p
ein magisches Modulo-Quadrat ausgibt, dh ein Quadrat mit Seitenlängen p-1
, sodass jede Zeile eine Liste der aufeinanderfolgenden Potenzen des ersten Elements in der Zeile ist und dasselbe für die Spalten. Alle Zahlen zwischen 0
und p
müssen vorkommen, und das Quadrat kann nur Zahlen in diesem Bereich enthalten.
Die Eingabe ist eine Zahl oder eine Zeichenfolge, und die Ausgabe kann ASCII, eine Matrix, ein Array von Arrays (jedes vernünftige Format) sein.
Dies ist Code-Golf, also gewinnt der kürzeste Code.