Soy un gran admirador de la teoría de números. Una gran cosa en la teoría de números es la aritmética modular; la definición es si y solo si . Una cosa divertida es elevar a los poderes: especialmente cuando el módulo es un número primo. En particular, se ha demostrado que si y son relativamente primos (no comparten factores comunes además de ), entonces existe un número tal que .
Explicaré cuál es el ejercicio con un ejemplo. Tomemos un módulo . Una posible salida del programa o función sería:
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
Cada fila es una lista de las potencias del primer número en esa fila: la primera fila es , que es equivalente a módulo . La segunda fila del cuadrado de arriba son las potencias de , etcétera, hasta la última fila, que son solo potencias de .
Este es un módulo cuadrado mágico porque:
- El cuadrado es simétrico; que es, la ésima columna es el mismo que el -ésimo renglón.
- Todos los valores a aparecen al menos una vez.
A continuación se muestra la única otra salida válida para , comenzando con potencias de :
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
El reto
Cree una función o programa que, dado un primo, p
genere un cuadrado de módulo mágico, es decir, un cuadrado con longitudes laterales p-1
, de modo que cada fila sea una lista de las potencias consecutivas del primer elemento de la fila, y lo mismo para las columnas. Todos los números entre 0
y p
deben aparecer, y el cuadrado solo puede contener números en ese rango.
La entrada es un número o una cadena, y la salida puede ser ascii, una matriz, una matriz de matrices (cualquier formato razonable).
Este es el código de golf, por lo que gana el código más corto.