Tivemos um grande desafio de fatoração há um tempo atrás, mas esse desafio tem quase seis anos e mal atende aos nossos requisitos atuais, então acredito que está na hora de um novo.
Desafio
Escreva um programa ou função que tome como entrada um número inteiro maior que 1 e produza ou retorne uma lista de seus fatores primos.
Regras
- A entrada e a saída podem ser fornecidas por qualquer método padrão e em qualquer formato padrão.
- Fatores duplicados devem ser incluídos na saída.
- A saída pode estar em qualquer ordem.
- A entrada não será menor que 2 ou maior que 2 31 - 1.
- Os internos são permitidos, mas é recomendável incluir uma solução não interna.
Casos de teste
2 -> 2
3 -> 3
4 -> 2, 2
6 -> 2, 3
8 -> 2, 2, 2
12 -> 2, 2, 3
255 -> 3, 5, 17
256 -> 2, 2, 2, 2, 2, 2, 2, 2
1001 -> 7, 11, 13
223092870 -> 2, 3, 5, 7, 11, 13, 17, 19, 23
2147483646 -> 2, 3, 3, 7, 11, 31, 151, 331
2147483647 -> 2147483647
Pontuação
Isso é código-golfe , então o código mais curto em bytes vence.
Respostas:
Pitão , 1 byte
Gosto das chances de Pyth nesse desafio.
fonte
Python 2 , 55 bytes
Experimente online!
fonte
Python 2, 53 bytes
Tenta cada divisor
i
em potencial por vez. Sei
é um divisor, o anexa e reinicia comn/i
. Senão, tenta o próximo divisor mais alto. Como os divisores são verificados em ordem crescente, apenas os primos são encontrados.Como um programa, para 55 bytes:
fonte
Mathematica,
3830 bytesObrigado @MartinEnder por 8 bytes!
fonte
FactorInteger[#][[All, 1]]&
? 26 bytesGeléia , 2 bytes
Experimente online!
fonte
Haskell , 48 bytes
Experimente online! Exemplo de uso:
(2%) 1001
rendimentos[7,11,13]
.fonte
JavaScript (ES6), 44 bytes
Horrivelmente ineficiente devido ao fato de iterar de 2 a todos os fatores primos, incluindo o último. Você pode reduzir drasticamente a complexidade do tempo ao custo de 5 bytes:
fonte
Cubix ,
3732 bytesExperimente online! ou Assista em ação .
fonte
Na verdade , 6 bytes
Experimente online!
Explicação:
fonte
o
agora, certo?J, 2 bytes
O corpo deve ter pelo menos 30 caracteres.fonte
MATL , 2 bytes
Experimente online!
Obrigatória "resposta interna chata".
fonte
Japonês, 2 bytes
Um interno
k
usado na entradaU
. Também se refere a um país.Teste online!
fonte
surdo , 3 bytes
Essa linguagem é bastante jovem e ainda não está pronta para qualquer coisa importante, mas pode ser fatorada como primordial:
Isso aguardará a entrada do usuário e emitirá a lista de fatores primos.
fonte
MATLAB, 6 bytes
Eu acho que isso não requer nenhuma explicação.
fonte
Bash + coreutils, 19 bytes
Experimente online!
fonte
factor|sed s/.*://
. Tambémfactor|cut -d: -f2
(oufactor|cut -d\ -f2
para corresponder à sua saída atual) é o mesmo comprimento de bytes, mas será executado mais rapidamente e usará menos sobrecarga de memória.factor|cut -d\ -f2-
eliminar o espaço inicial, que é um byte mais longo.Lote, 96 bytes
fonte
Pyke, 1 byte
Experimente aqui!
Fatores principais incorporados.
fonte
Hexagonia , 58 bytes
Ainda não terminou o golfe, mas o @MartinEnder deve ser capaz de destruir isso de qualquer maneira
Imprime fatores separados por espaço, com um espaço à direita
Golfe:
Estabelecido:
Explicação em breve.
fonte
05AB1E , 1 byte
Experimente online!
fonte
CJam, 2 bytes
cjam.aditsu.net / ...
Esta é uma função. Martin, parece que eu estava com sono.
fonte
C, 92 bytes
Versão não destruída:
fonte
Japt , 1 byte (não concorrente)
Experimente online!
fonte
PHP , 51 bytes
Experimente online!
fonte
C (gcc) , 51 bytes
Experimente online!
fonte
Perl 6 ,
7764 bytesTente
Experimente (Nota: não tem tempo suficiente para terminar)
Uma versão com muito mais desempenho é um pouco mais longa, com 100 bytes.
Tente
Expandido: (versão de 64 bytes)
fonte
VB.NET, 86 bytes
Teve isso em torno de alguns programas do Project Euler. Removidas as otimizações no interesse da falta, e este é o resultado. Naturalmente, o VB é muito detalhado, por isso é bastante longo. Não estou contando os principais espaços em branco. Pode ser omitido, mas é mais fácil ler com ele.
Isso leva um número inteiro como parâmetro e imprime os fatores primos com uma vírgula depois. Há uma vírgula no final.
fonte
Perl 6 , 51 bytes
Uma solução recursiva:
fonte
Java (OpenJDK) , 259 bytes
Experimente online!
fonte
Ruby, 61 bytes
Versão mais curta que eu consegui pensar.
fonte
Ruby , 48 bytes
Experimente online!
Um pouco atrasado para a festa, mas ... por que não?
fonte