Sono un grande fan della teoria dei numeri. Una cosa importante nella teoria dei numeri è l'aritmetica modulare; la definizione essendo se e solo se m \ mid ab . Una cosa divertente da fare è aumentare i poteri: specialmente quando il modulo è un numero primo. In particolare, è stato dimostrato che se a e m sono relativamente primi (non condividono fattori comuni oltre a 1 ), allora esiste un numero e tale che a ^ e \ equiv 1 \ mod m .
Spiegherò cos'è l'esercizio con un esempio. Prendiamo un modulo . Un possibile output del programma o della funzione sarebbe:
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
Ogni riga è un elenco dei poteri del primo numero in quella riga: la prima riga è , che equivale a modulo . La seconda fila del quadrato sopra è il potere di , eccetera, fino all'ultima fila, che sono solo poteri di .
Questo è un quadrato modulo magico perché:
- Il quadrato è simmetrico; cioè, la esima colonna è la stessa della esima riga.
- Tutti i valori da a visualizzati almeno una volta.
Di seguito è l'unico altro output valido per , a partire da potenze di :
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
La sfida
Crea una funzione o un programma che dia un p
output primo ad un magico modulo quadrato, cioè un quadrato con lunghezze laterali p-1
, in modo tale che ogni riga sia un elenco dei poteri consecutivi del primo elemento della riga e lo stesso per le colonne. Tutti i numeri tra 0
e p
devono essere presenti e il quadrato può contenere solo numeri in quell'intervallo.
L'input è un numero o una stringa e l'output può essere ascii, una matrice, una matrice di array (qualsiasi formato ragionevole).
Questo è code-golf, quindi vince il codice più corto.