Fiz essa pergunta em uma entrevista, mas não consegui descobrir nenhuma solução. Não sei se a pergunta estava certa ou não. Eu tentei muito, mas não consegui encontrar nenhuma solução. Honestamente falando, nada veio à minha mente.
Números Rocco
Um número inteiro positivo é um número Rocco se puder ser representado como ou , onde é um número primo.
Os 10 primeiros números de Rocco são:
Tarefa
Seu código deve aceitar um número inteiro positivo como entrada e determinar se é um número Rocco ou não.
Brownie points
- Escreva uma função que calcule e imprima a contagem de números Rocco menor ou igual a 1 milhão.
- Escreva uma função que calcule e imprima a contagem de números Rocco a partir da pergunta de bônus (acima de um) que é primo.
code-golf
decision-problem
number-theory
vijayscode
fonte
fonte
print 0
. Todos os números Rocco são compostos(n*..)
, portanto, não há números primos em nenhum intervalo.Respostas:
05AB1E , 8 bytes
Retorna se for um número Rocco ou caso contrário.1 n 0 0
Experimente online!
Quão?
Dado um número inteiro positivo , testamos se existe um fator primo de tal que:n p n
Comentado
fonte
JavaScript (ES7), 55 bytes
Experimente online!
Quão?
Daí as seguintes equações quadráticas:
Para fazer isso, usamos a função clássica de teste de primalidade recursiva, com um teste adicional para garantir que ela não se repita para sempre se receber um número irracional como entrada.
Função principal do invólucro:
fonte
Perl 6 ,
4528 bytesExperimente online!
Explicação:
fonte
Regex (ECMAScript),
6462 bytesIsso usa uma variante do algoritmo de multiplicação descrito brevemente em um parágrafo dos meus abundantes números regex post . Este é um spoiler . Portanto , não leia mais se não quiser que você estrague uma mágica avançada de expressões regulares unárias . Se você quiser tentar descobrir essa mágica, eu recomendo começar resolvendo alguns problemas na lista de problemas recomendados consecutivamente identificados por spoilers neste post anterior e tentando criar as idéias matemáticas de forma independente.
O algoritmo de multiplicação é implementado de maneira diferente aqui, porque estamos afirmando que dois valores conhecidos multiplicados juntos são iguais a outro valor conhecido (como também foi feito na versão alternativa do regex neste post , para testar se um número é um quadrado perfeito). Na maioria das minhas outras respostas regex postadas até agora, a multiplicação é implementada como um cálculo (não uma afirmação, conceitualmente falando), onde o objetivo é encontrar o produto de dois números conhecidos. Ambos os métodos funcionam em ambas as circunstâncias, mas em termos de golfe, são piores no trabalho um do outro.
Experimente online!
fonte
Braquilog ,
1312 bytesDigite o número do candidato como um argumento da linha de comandos. Saídas
true
oufalse
. Experimente online!Explicação
O código é um predicado cuja entrada é irrestrita e cuja saída é o número que estamos testando.
(Dicas são bem-vindas. Isso
{+|-}
ainda parece desajeitado.)fonte
Braquilog , 9 bytes
Abordagem diferente, então DLosc 's resposta
Pega N como saída, retorna [P, P-14] ou [P + 14, P] pela entrada (primeiro número maior)
explicação
Experimente online!
fonte
Pitão,
2220 bytesExperimente online aqui .
Editar: salvos 3 bytes como entrada sempre será positivo, portanto, não é necessário filtrar valores negativos da lista. Também foi corrigido um bug para entradas
1
e2
custava 1 byte. Versão anterior:}Qsm*Ld>#0+Ld_B14fP_TU
fonte
05AB1E ,
161514 bytesEconomizei 1 byte computando 14 com em
7·
vez dežvÍ
(não posso acreditar que não pensei nisso em primeiro lugar).Guardado 1 byte graças a Emigna
Experimente online! ou Teste todas as entradas
Explicação
fonte
}˜så
para aQ}Z
utilização de entrada implícita. Seu teste-Suite teria que ser mudado um pouco para algo como este para fazê-lo funcionar então. Além disso, uma forma mais óbvia de escreveržvÍ
ou7·
seria14
;)J ,
2115 bytesCom base na solução da Arnauld :
Experimente online!
Tentativa anterior:
Experimente online!
fonte
14 e.q:|@-]%q:
para 14 bytesRetina 0.8.2 , 61 bytes
Experimente online! Explicação:
Converta para unário.
\1
captura o maior dos dois fatores.\2
captura a constante 14, salvando um byte.\3
captura o menor dos dois fatores, menos 1. Isso também garante que ambos os fatores sejam pelo menos 2.Verifique os dois fatores para garantir que pelo menos um deles seja primo. A idéia de usar
\2?
foi descaradamente roubada da resposta da @ Deadcode.Repita o maior dos dois fatores um número de vezes igual a um menor que o menor dos dois fatores. Como já capturamos o fator maior, isso acaba capturando o produto dos dois fatores.
Verifique se o produto é igual ao número fornecido.
Uma tradução direta para a Retina 1, substituindo
$*
por*1
, teria a mesma contagem de bytes, mas um byte poderia ser salvo substituindo todos os1
s por se_
então*1
poderia ser substituído por, em*
vez de*_
. Resposta anterior da retina 1 para 68 bytes:Experimente online! Explicação:
Converta para unário.
Encontre todos os pares de fatores.
Garanta que um seja primo.
Pegue a diferença absoluta.
Verifique se existem 14.
fonte
JavaScript (Nó Babel) , 69 bytes
Porra, eu acho que ia vencer a resposta de Arnaulds, mas não .....: c
Experimente online!
Quero me livrar da
x=>[...Array(x)].some(
peça usando a recursão, para que ela fique mais curta com o tempoExplicação
Ele usa a fórmula
fonte
Japonês , 10 bytes
Igual à minha resposta Javascript
Experimente online!
fonte
Geléia , 9 bytes
Experimente online!
fonte
APL (NARS) 16 caracteres, 32 bytes
{π⍵} encontraria a fatoração de seu argumento e supomos que o último elemento de seu resultado (a lista de divisores de n) seja o divisor primário máximo de n; Aqui supomos que uma definição equivalente do número de Rocco é: n é um número de Rocco <=> fator máximo primo de n: r é tal que seja verdadeiro 14 = nrn ÷ r [para o pseudocódigo C como 14 == abs (rn / r) esta definição de número de Rocco parece finalmente aprovada no intervalo 1..1000000]; o intervalo do valor ok seria 1..maxInt; teste:
fonte
C # (compilador interativo do Visual C #) , 99 bytes
Experimente online!
Enumerable.Range
ataca novamente :) Usando a bandeira do compilador maluca, você pode reduzir um pouco as coisas, embora eu seja meio fã da solução de baunilha.C # (Compilador interativo do Visual C #) + /u:System.Linq.Enumerable, 77 bytes
Experimente online!
Abaixo está um porto da solução de Arnauld que parecia bem legal. Atualmente é o mais longo, mas provavelmente pode ser jogado alguns.
C # (compilador interativo do Visual C #) , 101 bytes
Experimente online!
fonte
APL (NARS) 30 caracteres, 60 bytes
Aqui 0π é a função digamos que se um número é primo, teste:
fonte
F #, 2 respostas (não competidor)
Gostei muito das respostas de @Arnauld, então as traduzi.
123 bytes , com base na resposta JavaScript
Explicação:
125 bytes , com base na resposta 05AB1E
Explicação:
fonte
Python 2 , 58 bytes
Saídas pelo código de saída, falha (
1
) para números Rocco.Experimente online!
fonte