Defina que o número natural p é um primo +1 do número natural n se p é um número primo e a representação binária padrão (ou seja, sem zeros à esquerda) de p pode ser obtida adicionando (ou seja, acrescentando, acrescentando ou inserindo) um único 1 para a representação binária padrão de n .
Por exemplo, a representação binária de 17 é 10001 2 . Os números naturais distintos que podem ser formados pela adição de 1 a 10001 2 são 110001 2 ou 49 , 101001 2 ou 41 , 100101 2 ou 37 e 100011 2 ou 35 .
Entre esses, 41 e 37 são números primos, então 17 tem dois números primos +1 .
Tarefa
Escreva um programa ou função que aceite um número inteiro estritamente positivo n como entrada e imprima ou retorne o número de números primos +1 distintos de n .
A entrada e a saída devem ser um número inteiro ou sua representação de sequência decimal ou unária.
Aplicam-se as regras de código-golfe padrão .
Casos de teste
Input: 4
Output: 0
Input: 1
Output: 1
Input: 17
Output: 2
Input: 33
Output: 3
Input: 553
Output: 4
Input: 3273
Output: 5
Input: 4145
Output: 6
Input: 4109
Output: 7
Input: 196869
Output: 8
Respostas:
Pitão, 20 bytes
Suíte de teste
fonte
JavaScript ES6, 141 bytes
143147160Economiza 13 bytes, graças a @Naouak
Método semelhante ao da minha resposta TeaScript, usa RegExp (você me ouviu direito) para procurar por números primos.
Ungolfed
fonte
(p=(n,c)=>n%c!=0?c>=n-1?1:p(n,++c):0)('0b'+l,2)
em vez de!Array(+('0b'+l)+1).join(1).match(/^1?$|^(11+?)\1+$/)
Minkolang 0.11 ,
5452 bytesExplicação
fonte
TeaScript , 22 bytes
O TeaScript está começando a se parecer com APL ... Os caracteres especiais são convertidos em seqüências mais longas e comumente repetidas
O intérprete online não se esqueça de marcar "Entradas são números".
Explicação && Ungolfed
fonte
Julia,
5552 bytesk=2.^(0:endof(bin(n)))
gera uma matriz contendo os poderes de 2 de 1 para o poder mais alto menor quen
.2n+k-n%k
então usa operações de matriz para determinar todos os possíveis "números +1".∪
(equivalente aunion
, que faz o mesmo queunique
nesta situação) remove os valores de repetição. Em seguida,sum(isprime,)
conta o número de números primos na lista.fonte
CJam, 26 bytes
Não é um vencedor, mas supera as respostas existentes do CJam de maneira bastante sólida e é a primeira vez que uso o comando 0.6.5
e\
.Teste aqui.
Explicação
Uma coisa que vale a pena notar é que trocamos os bits antes
0
e1
antes da primeira cópia, para que perdemos a matriz original com a1
anexada à frente. No entanto, a entrada é sempre positiva, portanto o dígito à esquerda será sempre um. Isso significa que, depois de anexar outra, a lista de dígitos sempre começará com[1 1 ...]
a primeira troca, em qualquer caso, a não troca.fonte
Mathematica, 87 bytes
fonte
Julia,
11010810487 bytesIsso cria uma função sem nome que aceita e número inteiro e retorna um número inteiro. Para chamá-lo, dê um nome, por exemplo
f=n->...
.Ungolfed:
Economizou 17 bytes graças a Glen O!
fonte
bin
precisa começar com 1, para que você não precise manipular separadamente"1"b
. E quandoi=length(b)
, você terá ob[i+1:end]
equivalente a""
, portanto, não há necessidade dessa entrada (só precisa ser manipuladab=bin(n)
em algum momento). Esum
fará o mesmo quecount
por dois bytes a menos.b
qualquer maneira, poderá obtê-lo com um truque -b=bin(n)[s=1:end]
e depoisfor i=s
para a compreensão.bin
deve ser 1, e você verá o seguinte:n->sum(i->isprime(parse(Int,i,2)),(b=bin(n);unique([b[[1:i;1;i+1:end]]for i=1:endof(b)])))
- isso reduz a contagem para 90 bytes.unique
porunion
- ele fará a mesma coisa, se receber apenas uma matriz como entrada. Ou melhor ainda, em∪
vez deunion
.CJam, 58 bytes
Isso levou um dia e essa foi a minha quarta iteração.
fonte
Japonês
-x
,1411 bytesExperimente ou execute todos os casos de teste
fonte
PHP, 145 bytes
Adicionei uma nova linha para facilitar a leitura:
fonte
CJam, 34 bytes
Experimente online
Primeira versão, será atualizada se eu apresentar algo melhor.
fonte
APL, 55
Versão específica do Dyalog 2 bytes mais curta:
fonte
Matlab (120)
fonte
Braquilog , 17 bytes
Experimente online!
Entrada através da variável de entrada e saída através da variável de saída.
fonte
Gelatina , 13 bytes
Experimente online!
fonte
Python 2 , 103 bytes
Experimente online!
fonte