A sequência
Todo mundo sabe que o único número primo uniforme é 2
. Ho-hum. Porém, existem certos números pares em n
que, quando concatenados n-1
, se tornam um número primo.
Para iniciantes, 1
não está na lista, porque 10
não é excelente. Da mesma forma com 2
( 21
) e 3
( 32
). No entanto, 4
funciona porque 43
é primo, por isso é o primeiro número na sequência a(1) = 4
. O próximo número que funciona (nem 6
( 65
) nem 8
( 87
) funciona) é 10
, porque 109
é primo, é a(2) = 10
. Então pulamos um monte mais até 22
, porque 2221
é primo, então a(3) = 22
. E assim por diante.
Obviamente, todos os termos nesta sequência são pares, porque qualquer número ímpar n
quando concatenado com n-1
se torna par (como se 3
transforma em 32
), o que nunca será primo.
Esta é a sequência A054211 no OEIS.
O desafio
Dado um número de entrada n
que se encaixa em algum lugar nessa sequência (ou seja, n
concatenado com n-1
é primo), imprima sua posição nessa sequência. Você pode escolher indexado com 0 ou 1, mas indique qual em seu envio.
Regras
- Pode-se presumir que a entrada e a saída se encaixam no tipo inteiro nativo do seu idioma.
- A entrada e saída podem ser fornecidas em qualquer formato conveniente .
- Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
- Se possível, inclua um link para um ambiente de teste on-line para que outras pessoas possam experimentar seu código!
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
Exemplos
Os exemplos abaixo são indexados em 1.
n = 4
1
n = 100
11
n = 420
51
fonte
n
é sempre o único número primo divisível porn
. Não é especial - é assim que os números primos funcionam.Respostas:
Geléia ,
87 bytesUm link monádico que pega um membro de sequência e retorna seu índice na sequência.
Experimente online!
Quão?
fonte
zip(head(), pop())
truque é muito legal. :)Haskell ,
807570 bytesEconomize 5 bytes graças a Laikoni
Experimente online!
fonte
p x=all((>0).mod x)[2..x-1]
que falha em 1, mas isso não deve importar nesse caso.show x++show(x-1)
pode ser reduzido parashow=<<[x,x-1]
.show
poderia ser feito em um método mais curto, mas não pensei em um mapa de concat por algum motivo.Gelatina ,
12, 10, 8 bytesExperimente online!
1-2 bytes salvos graças a @ nmjmcman101 e 2 bytes salvos graças a @Dennis!
Explicação:
fonte
05AB1E ,
987 bytesCódigo
Usa a codificação 05AB1E . Experimente online!
Explicação
fonte
'0-1'
é primo.Casca ,
131110 bytes1
solução não indexada:Experimente online!
Ungolfed / Explicação
Obrigado @Zgarb por
-3
bytes!fonte
£İp
é equivalente aṗ
. Além disso, você pode salvar um byte em#…ḣ
vez de£f…N
.Python 2 , 87 bytes
-2 bytes graças a @officialaimm . 1 indexado.
Suíte de teste.
fonte
Pitão , 12 bytes
Experimente online! ou Verifique todos os casos de teste.
Quão?
fonte
Japt ,
1514121198 bytes1 indexado.
Tente
fonte
Æ
eÇ
?! Obrigado, @ Oliver; Vou atualizar quando voltar ao computador.2o+X
(com espaço à direita) funcionaria no lugar de[XXÉ]
, embora, se eu usar os balancetes automáticos,[]
sua solução seja um byte mais curto. (Na verdade, 2, desde que você poderia, então, fazerõ_ZÉ]¬nÃèj
)[]
! : DRöda , 73 bytes
Experimente online!
1 indexado. Ele usa o fluxo para fazer entrada e saída.
Explicação:
fonte
Pitão , 14 bytes
Experimente online!
Explicação
fonte
lfTmP_s+`d`tdS
, é uma pena que eu não encontrar o seu truque por mim naquele tempo :)Perl 6 , 45 bytes
Experimente online!
O
grep
produz a sequência de números qualificados, então procuramos a chave (:k
) (ou seja, o índice) dofirst
número na lista que é igual ao parâmetro de entrada$_
.fonte
C,
9994 bytes1 indexado. Dói-me escrever testes de primalidade que são tão desperdiçadores em termos computacionais, mas afinal, os bytes são bytes.
Se permitirmos coisas realmente frágeis, compilando na minha máquina sem otimizações com o GCC 7.1.1, os seguintes 94 bytes funcionam (obrigado @Conor O'Brien )
caso contrário, esses 99 bytes muito mais robustos fazem o trabalho
Programa completo, um pouco mais legível:
fonte
n=c;
em vez dereturn c;
:i,c,m,k;f(n){c=i=1;for(;++i<n;c+=m==k){for(k=m=1;m*=10,m<i;);for(m=i*m+i-1;++k<m&&m%k;);}n=c;}
JavaScript (ES6),
49 4847 bytes1 indexado. Limitado pelo tamanho da pilha de chamadas do seu mecanismo.
Experimente online!
fonte
Mathematica, 77 bytes
fonte
QBIC , 25 bytes
Explicação
Isso usa algumas coisas matemáticas bastante complicadas, com um cast-to-string aplicado com uma boa medida. Fazer um hat de versão fazer apenas concatenação baseada em string é um byte mais longo:
fonte
PHP , 203 bytes
Experimente online!
Usa um índice baseado em 1 para saída. O link TIO possui a versão legível do código.
fonte
Ruby , 42 + 9 = 51 bytes
Usa as
-rprime -n
bandeiras. 1 indexado.Funciona contando todos os números iguais ou inferiores à entrada que atende à condição (ou mais tecnicamente, todos os números que atendem à
n-1
condição). Como é garantido que a entrada está na sequência, não há risco de erro de uma entrada aleatória como7
essa "não se torna primordial".Experimente online!
fonte
Ruby , 62 bytes
Experimente online!
Indexado 1
fonte
Python 2 , 85 bytes
Indexado 1
Teste
Melhoria na resposta do Sr. Xcoder
fonte
Java 8, 108 bytes
Indexado a 0
Explicação:
Experimente online.
fonte
Stax , 10 bytes
1- Indexado
Execute e depure-o Explicação
fonte
Arrumado , 33 bytes
Experimente online!
Explicação
A idéia básica é criar uma sequência dos números válidos e retornar uma função de índice com curry.
fonte