Introducción / antecedentes
En una discusión reciente en el chat de cifrado, tuve el desafío de discutir / ayudar con la prueba de primalidad de Fermat y los números de Carmichael. Esta prueba se basa en la premisa que a^(p-1) mod p==1
siempre se mantendrá para los primos p
, pero no siempre para los compuestos. Ahora, un número de Carmichael es esencialmente el peor enemigo de la prueba de Fermat: un número para el que tienes que elegir a
para no ser primo p
para obtener a^(p-1) mod p!=1
. Ahora, si a
no es co-prime, esencialmente encontraste un factor no trivial dep
y como todos sabemos, factorizar puede ser bastante difícil. Especialmente si todos los factores son suficientemente grandes. Ahora puede darse cuenta de por qué la prueba de Fermat no se usa en la práctica con tanta frecuencia (bueno, hay mejores algoritmos), es porque hay números para los que usted como defensor (en términos de seguridad) tendría que hacer una cantidad similar de trabajo que un atacante (es decir, factorizar el número).
Entonces, ahora que sabemos por qué estos números son algo fascinantes, los generaremos de la manera más breve posible, ¡así que podemos memorizar el código de generación si alguna vez necesitamos alguno!
Los números de Carmichael también se conocen como A002997 en OEIS . Ya
existe un desafío relacionado , pero las entradas desde allí no son competitivas aquí porque están optimizadas para la velocidad en lugar del tamaño. El mismo argumento es válido para la dirección inversa, es probable que las entradas aquí hagan compensaciones contra la velocidad a favor del tamaño.
Especificación
Entrada
Este es un desafío de secuencia estándar , por lo que toma un entero positivo o no negativo n
como entrada. n
puede estar indexado 0 o 1 como prefiera (indíquelo).
Salida
Su salida será el n
enésimo número carmichael o los primeros n
números carmichael, como prefiera (indíquelo).
Especificación
Un entero x
es un número de Carmichael si y solo si x
es compuesto y para todos los enteros y
con gcd(x,y)=1
, contiene quey^(x-1) mod x==1
.
¿Quién gana?
Este es el código de golf , por lo que gana el código más corto en bytes.
Se aplican las reglas estándar de E / S y lagunas.
Casos de prueba
Los primeros números de Carmichael son:
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