Uma coleção de números inteiros positivos d_1 d_2 ... d_k
é uma fatoração de um número inteiro positivo n
se
d_1 * d_2 * ... * d_k = n
Cada número inteiro positivo possui uma fatoração primária única , mas em geral eles também possuem fatorações nas quais alguns dos termos são compostos. Por exemplo
12 = 6 * 2 = 4 * 3 = 3 * 2 * 2
Escreva um programa, função, verbo ou similar que tenha como entrada um único número inteiro positivo e retorne ou imprima uma lista completa de suas fatorações distintas. As fatorações podem ser produzidas em qualquer ordem, e seus termos podem estar em qualquer ordem, mas não duas devem ser permutações uma da outra. As fatorações podem não incluir 1
duas exceções: para entrada, n
você pode fornecer a fatoração em n*1
vez de n
; e para entrada, 1
você pode dar a fatoração em 1
vez da lista vazia.
Você pode assumir que a entrada estará no intervalo de um número inteiro de 32 bits assinado. Se a saída for como uma sequência, deve haver uma distinção clara entre a delimitação de números dentro de uma fatoração e a delimitação das fatorações, mas não é necessário (por exemplo) que os fatores sejam unidos a um *
.
Seu código deve ser capaz de lidar com qualquer entrada válida em 10 minutos em uma máquina de desktop razoável.
Exemplos
1 [[]]
or [[1]]
or [[1 1]]
7 [[7]]
or [[7 1]]
or [[1 7]]
12 [[12] [6 2] [4 3] [2 3 2]]
or variants
16 [[2 2 2 2] [2 2 4] [2 8] [4 4] [16]]
or variants
901800900 a list of 198091 factorisations
1338557220 a list of 246218 factorisations
fonte
901800900
e em1338557220
algum lugar onde podemos verificá-las? Meu código está me fornecendo 2048 e 1024 fatorações para esses números, respectivamente, e não sei por que.Respostas:
Haskell, 56 bytes
(2!)(1338557220::Int)
imprime em cinco minutos no meu laptop, quando compiladoghc -O3
.Haskell, 62 bytes, mas muito mais rápido
(2!)(1338557220::Int)
imprime em um quarto de segundo no meu laptop, quando compiladoghc -O3
.fonte
ghc
dá-meParse error: naked expression at top level
eghci
dá-meparse error on input `='
(2!)
pelo programamain = print ((2!) (1338557220::Int))
, compile comghc -O3 factor.hs
e execute com./factor
.Pitão, 29 bytes
Experimente online
É executado em vinte segundos
1338557220
no meu laptop.fonte
pyth factor.pyth
(oupyth -c 'Msam+Ldgd/Hdf!%HT>S@H2tG]]Hg2'
), fornecendo16
stdin. Verifique se você está usando uma versão atual do Pyth; implícitoQ
foi adicionado em março. Não consigo imaginar como você pode estar conseguindo a divisão por zero, no entanto."
vez de'
, e bash estava expandindo o!%
para outra coisa.Python ,
2523133123111451411371351038483 bytesIsso se baseia amplamente na resposta Pyth de Anders Kaseorg . Todas as sugestões de golfe são bem-vindas. Experimente online!
Edit: 19 bytes jogados de golfe graças a Dennis. Corrigido um erro de digitação no código e adicionado um link TIO.
Ungolfed:
fonte
**.5
se livra da importação.JavaScript (ES6), 83 bytes
Apenas emprestei o truque de raiz quadrada do @ AndersKaseorg porque acabou me salvando bytes em geral. Imprime
1
para uma entrada de1
, caso contrário, não imprime1
s.fonte
Ruby 1.9+,
878987 bytesEsta resposta é baseada na resposta Pyth de Anders Kaseorg . Esse código funciona apenas para versões após o Ruby 1.9, já que as lambdas stabby
->
foram introduzidas apenas no 1.9. Todas as sugestões de golfe são bem-vindas.Ungolfed:
fonte
g[n/d,d]
:wrong number of arguments (0 for 1)
->
foram introduzidas no Ruby 1.9. Vou editar a resposta para mostrar o número da versão necessária.g[n/d,d]
.g(n/d,d)
é mais compatível com versões anteriores.f[n]
é necessário chamar lambdas stabby e ruby lambdas em geral.f(n)
ef n
chamadas exigemdef
eend
. Mais informações aqui e aquiJ, 52 bytes
Não é tão eficiente quanto poderia ser, pois algumas fatorações podem ser repetidas e uma passagem final deve ser feita após a classificação de cada fatoração e a eliminação da duplicação.
Experimente online! (Mas tente manter os valores de entrada pequenos).
Na minha área de trabalho, os horários são
Explicação
Esse método depende da geração de todas as partições definidas para os fatores primos do número inteiro de entrada n . O desempenho é melhor quando n é livre de quadrados, caso contrário, fatorações duplicadas serão criadas.
fonte