Um emirp é um primo não palindrômico que, quando revertido, também é primo.
A lista de emirps da base 10 pode ser encontrada no OEIS . Os seis primeiros são:
13, 17, 31, 37, 71, 73
No entanto, devido à regra de reversão, os emirps são diferentes em cada base. Por exemplo, os seis primeiros emirps binários são:
Bin | 1011, 1101, 10111, 11101, 101001, 100101
Dec | (11 , 13 , 23 , 29 , 37 , 41 )
... e em hexadecimal, são eles:
Hex | 17, 1F, 35, 3B, 3D, 53
Dec | (23, 31, 53, 59, 61, 83)
Curiosidade: não existem emirps no unário, pois todo número é um palíndromo.
O desafio
Sua tarefa é criar uma função (ou programa completo), que tem dois parâmetros, e , e gera uma lista dos primeiros emirps em base de .
Regras / Detalhes:
- b 0 e são números inteiros positivos maiores que .
- Você pode assumir : ou seja, a base estará entre binário e hexidecimal.
- Você deve poder calcular valores de até .100
- A lista gerada pode estar na base , ou na base inteira padrão do seu idioma, desde que você o especifique em sua resposta.
- Não são permitidas verificações emirp internas (os testes de primalidade internos estão corretos)
- Você não pode codificar os emirps nem ler nenhum arquivo externo.
- As brechas padrão são proibidas, como sempre.
- Isso é código-golfe , então a resposta mais curta (em bytes) vence.
Casos de teste
Para cada caso de teste, incluí a lista na base b
e seus 10 equivalentes na base.
B = 2, N = 10
BIN: [1011, 1101, 10111, 11101, 100101, 101001, 101011, 101111, 110101, 111101]
DEC: [11, 13, 23, 29, 37, 41, 43, 47, 53, 61]
B = 3, N = 5
BASE3: [12, 21, 102, 201, 1011]
DEC: [5, 7, 11, 19, 31]
B = 12, N = 7
BASE12: [15, 51, 57, 5B, 75, B5, 107]
DEC: [17, 61, 67, 71, 89, 137, 151]
B = 16, N = 4
HEX: [17, 1F, 35, 3B]
DEC: [23, 31, 53, 59]
Você pode testar seu programa ainda mais no meu exemplo Python (não destruído) em repl.it
fonte
05AB1E , 17 bytes
Usa a codificação CP-1252 .
A ordem de entrada é A
n, b
saída está na base 10.
Experimente online!
Explicação
fonte
Mathematica, 70 bytes
Trabalha para
0 <= n <= 100
e2 <= b <= 16
. A partir da listaPrime@Range@437
dos primeiros437
números primos, encontrar oCases
p
que aIntegerReverse
r
dosp
da base#2
não é igual ap
, e também é privilegiada, em seguida, tomar o primeiro#
talp
.Aqui está uma solução de 95 bytes que funciona para arbitrárias
n>=0
eb>=2
:fonte
IntegerReverse
. Claro! Agradável.Reap
ing for permitido no rodapé:For[i=j=0,j<#,If[(r=IntegerReverse[p=Prime@++i,#2])!=p&&PrimeQ@r,j++;Sow@p]]&
Perl, 262 bytes
Legível:
c
converte um determinado número em base$b
ed
converte um determinado número da base$b
novamente em decimal, encontrando o primeiro número que retorna o$b
número base quando passado parac
. O loop for verifica se é um palíndromo e se os dois números são primos usando o regex composto.fonte
Mathematica 112 bytes
Exemplo
Encontre os 10 primeiros Emips em hexadecimal; retorne-os em decimal.
Ungolfed
fonte
Perl 6 , 91 bytes
Retorna a lista de emirps na base 10.
fonte
Python 3 ,
232214191188 bytesExperimente online!
fonte
C,
293286261 bytesMelhorado por @ceilingcat , 261 bytes:
Experimente online!
(Essa pessoa é como me seguir constantemente pelo PPCG e melhorar minhas coisas nos comentários, e assim que eu respondo para agradecer, ele simplesmente exclui o comentário e desaparece lol. Welp, obrigado novamente!)
Melhorado por @movatica , 286 bytes:
Experimente online!
Minha resposta original, 293 bytes:
Compilar
gcc emirp.c -o emirp -lm
e executar com./emirp <b> <n>
. Imprime emirps separados por espaço na base-10.fonte
JavaScript (ES6),
149148141140 bytesRetorna uma lista de emirps separados por espaço na base b. (Pode ser 2 bytes mais curto retornando uma lista decimal.)
Casos de teste
Mostrar snippet de código
fonte
Python 2 , 133 bytes
Experimente online!
Produz cada número em uma nova linha, na base 10
fonte
APL (NARS), 87 caracteres, 174 bytes
O resultado estará na base 10. Teste e resultados:
{(⍺⍴⍨⌊1+⍺⍟⍵)⊤⍵}
faria conversão de⍵
base⍺
, resultado inteiro da matriz;0π⍵
retornaria true [1] se⍵
for prime, caso contrário, retornaria 0.fonte