Einleitung / Hintergrund
In einer kürzlichen Diskussion im Krypto-Chat wurde ich aufgefordert, mit dem Fermat-Primalitätstest und den Carmichael-Zahlen zu diskutieren / zu helfen . Dieser Test basiert auf der Prämisse, dass a^(p-1) mod p==1
immer für Primzahlen gilt p
, aber nicht immer für Verbundwerkstoffe. Jetzt ist eine Carmichael-Zahl im Wesentlichen der schlimmste Feind des Fermat-Tests: Eine Zahl, für die Sie sich entscheiden müssen, um a
nicht mit ihnen p
zu koprimieren, um sie zu erhalten a^(p-1) mod p!=1
. Wenn dies a
nicht Co-Prime ist, haben Sie im Wesentlichen einen nicht trivialen Faktor von gefundenp
und wie wir alle wissen, kann Factoring ziemlich schwierig sein. Besonders wenn alle Faktoren ausreichend groß sind. Sie werden jetzt vielleicht feststellen, warum der Fermat-Test in der Praxis nicht so oft verwendet wird (nun, es gibt bessere Algorithmen), weil es Zahlen gibt, für die Sie als Verteidiger (in Bezug auf die Sicherheit) ähnlich viel Arbeit leisten müssten wie ein Angreifer (nämlich Faktor die Zahl).
Jetzt, da wir wissen, warum diese Zahlen etwas faszinierend sind, werden wir sie so schnell wie möglich generieren, sodass wir uns den generierenden Code einfach merken können, wenn wir jemals einen brauchen!
Carmichael-Nummern werden in OEIS auch als A002997 bezeichnet .
Es gibt bereits eine damit verbundene Herausforderung , aber die Einträge von dort sind hier nicht wettbewerbsfähig, da sie im Gegensatz zur Größe auf Geschwindigkeit optimiert sind. Das gleiche Argument gilt für die umgekehrte Richtung. Einträge hier machen wahrscheinlich Kompromisse gegen die Geschwindigkeit zugunsten der Größe.
Spezifikation
Eingang
Dies ist eine Standardsequenz Herausforderung, so dass Sie eine positive oder nicht negative ganze Zahl nehmen n
als Eingabe. n
kann je nach Wunsch 0- oder 1-indiziert sein (bitte angeben).
Ausgabe
Ihre Ausgabe ist entweder die n
-te Carmichael-Nummer oder die erste n
Carmichael-Nummer, wie Sie es bevorzugen (bitte angeben).
Spezifikation
Eine ganze Zahl x
ist genau dann eine Carmichael-Zahl, wenn sie zusammengesetzt x
ist und für alle ganzen Zahlen y
mit gcd(x,y)=1
gilt y^(x-1) mod x==1
.
Wer gewinnt?
Dies ist Code-Golf , also gewinnt der kürzeste Code im Byte!
Es gelten die Standardregeln für E / A und Lücken.
Testfälle
Die ersten Carmichael-Zahlen sind:
561,1105,1729,2465,2821,6601,8911,10585,15841,
29341,41041,46657,52633,62745,63973,75361,101101,
115921,126217,162401,172081,188461,252601,278545,
294409,314821,334153,340561,399001,410041,449065,
488881,512461