Introduzione / Contesto
In una recente discussione nella chat crittografica sono stato sfidato a discutere / aiutare con il test di primalità di Fermat e i numeri di Carmichael. Questo test si basa sulla premessa che a^(p-1) mod p==1
sarà sempre valida per i numeri primi p
, ma non sempre per i composti. Ora un numero di Carmichael è essenzialmente prova il peggior nemico di Fermat: numero A per il quale si deve scegliere a
di non essere co-prime con p
per ottenere a^(p-1) mod p!=1
. Ora, se a
non è co-prime, hai essenzialmente trovato un fattore non banale dip
e come tutti sappiamo il factoring può essere piuttosto difficile. Soprattutto se tutti i fattori sono sufficientemente grandi. Ora puoi capire perché il test di Fermat non viene utilizzato nella pratica spesso (bene ci sono algoritmi migliori), è perché ci sono numeri per i quali tu come difensore (in termini di sicurezza) dovresti fare un lavoro simile come un attaccante (ovvero fattore il numero).
Quindi ora che sappiamo perché questi numeri sono in qualche modo affascinanti, li genereremo nel modo più breve possibile, quindi possiamo semplicemente memorizzare il codice di generazione se mai ne avremo bisogno!
I numeri di Carmichael sono anche conosciuti come A002997 su OEIS .
Esiste già una sfida correlata , ma qui le voci non sono competitive perché sono ottimizzate per la velocità rispetto alle dimensioni. Lo stesso argomento vale per la direzione inversa, le voci qui sono suscettibili di compromettere la velocità a favore delle dimensioni.
specificazione
Ingresso
Questa è una sfida di sequenza standard , quindi prendi un intero positivo o non negativo n
come input. n
può essere indicizzato 0 o 1 come preferisci (si prega di indicare).
Produzione
Il tuo output sarà il n
-th numero di carmichael o il primo n
numero di carmichael, come preferisci (per favore indica).
specificazione
Un numero intero x
è un numero di Carmichael se e solo se x
è composto e per tutti i numeri interi y
con gcd(x,y)=1
, lo detiene y^(x-1) mod x==1
.
Chi vince?
Questo è code-golf , quindi vince il codice più corto in byte!
Si applicano le regole IO e scappatoie standard.
Casi test
I primi pochi numeri di Carmichael sono:
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