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==1siempre 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 apara no ser primo ppara obtener a^(p-1) mod p!=1. Ahora, si ano es co-prime, esencialmente encontraste un factor no trivial depy 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 ncomo entrada. npuede estar indexado 0 o 1 como prefiera (indíquelo).
Salida
Su salida será el nenésimo número carmichael o los primeros nnúmeros carmichael, como prefiera (indíquelo).
Especificación
Un entero xes un número de Carmichael si y solo si xes compuesto y para todos los enteros ycon 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