Je suis un grand fan de la théorie des nombres. Une grande chose dans la théorie des nombres est l'arithmétique modulaire; la définition étant si et seulement si . Une chose amusante à faire est d'augmenter les pouvoirs: surtout lorsque le module est un nombre premier. En particulier, il a été prouvé que si et sont relativement premiers (ne partagent aucun facteur commun à part ) alors il existe un nombre tel que .
Je vais expliquer ce qu'est l'exercice par un exemple. Prenons un module . Une sortie possible du programme ou de la fonction serait:
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
Chaque ligne est une liste des puissances du premier nombre de cette ligne: la première ligne est , ce qui équivaut à module . La deuxième rangée du carré ci-dessus correspond aux puissances de , etc., jusqu'à la dernière rangée, qui ne sont que des puissances de .
C'est un carré modulo magique car:
- Le carré est symétrique; c'est-à-dire que la ème colonne est la même que la ème ligne.
- Toutes les valeurs à apparaissent au moins une fois.
Voici la seule autre sortie valide pour , en commençant par des puissances 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
Le défi
Créez une fonction ou un programme qui donne un nombre premier p
un carré modulo magique, c'est-à-dire un carré avec des longueurs latérales p-1
, de sorte que chaque ligne est une liste des puissances consécutives du premier élément de la ligne, et la même chose pour les colonnes. Tous les nombres entre 0
et p
doivent apparaître, et le carré ne peut contenir que des nombres dans cette plage.
L'entrée est un nombre ou une chaîne, et la sortie peut être ascii, une matrice, un tableau de tableaux (tout format raisonnable).
C'est le code-golf, donc le code le plus court l'emporte.