Betrachten Sie die Ganzzahlen modulo, bei q
denen q
es sich um Primzahlen handelt. Ein Generator ist eine beliebige Ganzzahl 1 < x < q
, x^1, x^2, ..., x^(q-1)
die alle q-1
Ganzzahlen zwischen 1
und abdeckt q-1
. Betrachten Sie zum Beispiel die ganzen Zahlen modulo 7 (als die wir schreiben Z_7
). Dann 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
deckt alle Werte 3, 2, 6, 4, 5, 1
deckt alle Zahlen 1..6
nach Bedarf.
Die Aufgabe besteht darin, Code zu schreiben, der eine Eingabe übernimmt n
und einen Generator für ausgibt Z_n
. Sie können natürlich keine eingebaute Bibliothek verwenden, die dies für Sie erledigt.
Die einzige Einschränkung für die Leistung Ihres Codes besteht darin, dass Sie ihn vollständig getestet haben müssen n = 4257452468389
.
Beachten Sie, dass 2^n
dies 2
die Leistung von bedeutet n
. Das ist ^
Potenzierung.
1 < x < q
macht die Herausforderung imo viel einfacher.Antworten:
Pyth,
1615 BytesTestsuite
Wenn p die Eingabe ist, wissen wir, dass g ^ (p-1) = 1 mod p ist, also müssen wir nur überprüfen, dass g ^ a! = 1 mod p für jedes kleinere a ist. Aber a muss ein Faktor von p-1 sein, damit dies möglich ist, und jedes Vielfache eines a mit dieser Eigenschaft hat auch diese Eigenschaft, also müssen wir nur überprüfen, dass g ^ ((p-1) / q)! = 1 mod p für alle Primfaktoren q von p-1. Also überprüfen wir alle ganzen Zahlen g in aufsteigender Reihenfolge, bis wir eine finden, die funktioniert.
Erläuterung:
quelle
PtQ
Teil).Mathematica, 52 Bytes
Inspiriert von Isaacs Antwort .
quelle
quelle