Introdução / Histórico
Em uma discussão recente no chat de criptografia, fui desafiado a discutir / ajudar com o teste de primalidade de Fermat e os números de Carmichael. Esse teste é baseado na premissa que a^(p-1) mod p==1
sempre será válida para primos p
, mas nem sempre para compostos. Agora, um número de Carmichael é essencialmente o pior inimigo do teste de Fermat: um número para o qual você precisa escolher a
para não ser co-primo p
para obter a^(p-1) mod p!=1
. Agora, se a
não for co-prime, você basicamente encontrou um fator não trivial dep
e como todos sabemos, fatorar pode ser bastante difícil. Especialmente se todos os fatores forem suficientemente grandes. Agora você pode perceber por que o teste de Fermat não é usado na prática com tanta frequência (bem, existem algoritmos melhores), é porque existem números para os quais você, como defensor (em termos de segurança), teria que fazer uma quantidade semelhante de trabalho como um invasor (ou seja, fatorar o número).
Então agora que sabemos por que esses números são fascinantes, vamos gerá-los da maneira mais curta possível, para que possamos memorizar o código de geração, se precisarmos de algum!
Os números de Carmichael também são conhecidos como A002997 no OEIS .
Já existe um desafio relacionado , mas as entradas de lá não são competitivas aqui porque são otimizadas para velocidade, em vez de tamanho. O mesmo argumento vale para a direção inversa; as entradas aqui provavelmente farão trocas contra a velocidade em favor do tamanho.
Especificação
Entrada
Este é um desafio de sequência padrão , então você usa um número inteiro positivo ou não negativo n
como entrada. n
pode ser indexado com 0 ou 1 como preferir (indique).
Resultado
Sua saída será o n
número -th carmichael ou o primeiro n
número carmichael, como você preferir (indique).
Especificação
Um inteiro x
é um número Carmichael se e somente se x
é composto e para todos os inteiros y
com gcd(x,y)=1
, afirma que y^(x-1) mod x==1
.
Quem ganha?
Isso é código-golfe , então o código mais curto em byte vence!
Aplicam-se regras padrão de E / S e lacunas.
Casos de teste
Os primeiros números de carmichael são:
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