Considérez les entiers modulo q
où q
est premier, un générateur est n'importe quel entier de 1 < x < q
sorte qu'il x^1, x^2, ..., x^(q-1)
couvre tous q-1
les entiers entre 1
et q-1
. Par exemple, considérons les entiers modulo 7 (que nous écrivons comme Z_7
). Puis 3, 3^2 mod 7 = 2, 3^3 = 27 mod 7 = 6, 3^4 = 81 mod 7 = 4, 3^5 = 243 mod 7 = 5, 3^6 = 729 mod 7 = 1
couvre toutes les valeurs 3, 2, 6, 4, 5, 1
couvre tous les entiers 1..6
comme requis.
La tâche consiste à écrire du code qui prend une entrée n
et génère un générateur pour Z_n
. Bien entendu, vous ne pouvez pas utiliser de bibliothèque ou de bibliothèque intégrée qui le fasse pour vous.
La seule restriction sur les performances de votre code est que vous devez l'avoir testé jusqu'à son terme n = 4257452468389
.
Notez que cela 2^n
signifie 2
la puissance de n
. Cela ^
représente l'exponentiation.
1 < x < q
rend le défi beaucoup plus facile imo.Réponses:
Pyth,
1615 octetsSuite de tests
Si p est l'entrée, nous savons que g ^ (p-1) = 1 mod p, il nous suffit donc de vérifier que g ^ a! = 1 mod p pour tout plus petit a. Mais a doit être un facteur de p-1 pour que cela soit possible, et tout multiple d'un a avec cette propriété aura également cette propriété, nous n'avons donc qu'à vérifier que g ^ ((p-1) / q)! = 1 mod p pour tous les facteurs premiers q de p-1. Donc, nous vérifions tous les entiers g dans l'ordre croissant jusqu'à ce que nous trouvions celui qui fonctionne.
Explication:
la source
PtQ
partie).Mathematica, 52 octets
Inspiré par la réponse d' Isaacg .
la source
la source