Dada a entrada de um número inteiro ≥ 2, produza uma lista de seus divisores classificados pelos expoentes em suas fatorações primárias, em ordem crescente, ordenando primeiro pelo maior primo, depois pelo segundo maior e assim por diante.
Como exemplo, considere o número inteiro 72, que é 2 3 3 2 . Tem os divisores
1 3^0 · 2^0
2 3^0 · 2^1
3 3^1 · 2^0
4 3^0 · 2^2
6 3^1 · 2^1
8 3^0 · 2^3
9 3^2 · 2^0
12 3^1 · 2^2
18 3^2 · 2^1
24 3^1 · 2^3
36 3^2 · 2^2
72 3^2 · 2^3
Quando ordenados em ordem crescente pelos expoentes nos fatores primos, com primos maiores tendo prioridade, isso se torna
1 3^0 · 2^0
2 3^0 · 2^1
4 3^0 · 2^2
8 3^0 · 2^3
3 3^1 · 2^0
6 3^1 · 2^1
12 3^1 · 2^2
24 3^1 · 2^3
9 3^2 · 2^0
18 3^2 · 2^1
36 3^2 · 2^2
72 3^2 · 2^3
Observe que a lista é classificada primeiro pela ordem do expoente de 3 e depois pelo expoente de 2. Você também pode pensar nisso como lendo da esquerda para a direita e de cima para baixo na grade a seguir:
2^0 2^1 2^2 2^3
3^0 1 2 4 8
3^1 3 6 12 24
3^2 9 18 36 72
Casos de teste:
2 => 1 2
72 => 1 2 4 8 3 6 12 24 9 18 36 72
101 => 1 101
360 => 1 2 4 8 3 6 12 24 9 18 36 72 5 10 20 40 15 30 60 120 45 90 180 360
3780 => 1 2 4 3 6 12 9 18 36 27 54 108 5 10 20 15 30 60 45 90 180 135 270 540 7 14 28 21 42 84 63 126 252 189 378 756 35 70 140 105 210 420 315 630 1260 945 1890 3780
30030 => 1 2 3 6 5 10 15 30 7 14 21 42 35 70 105 210 11 22 33 66 55 110 165 330 77 154 231 462 385 770 1155 2310 13 26 39 78 65 130 195 390 91 182 273 546 455 910 1365 2730 143 286 429 858 715 1430 2145 4290 1001 2002 3003 6006 5005 10010 15015 30030
65536 => 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536
74088 => 1 2 4 8 3 6 12 24 9 18 36 72 27 54 108 216 7 14 28 56 21 42 84 168 63 126 252 504 189 378 756 1512 49 98 196 392 147 294 588 1176 441 882 1764 3528 1323 2646 5292 10584 343 686 1372 2744 1029 2058 4116 8232 3087 6174 12348 24696 9261 18522 37044 74088
Como esse é o código-golfe , o código mais curto em bytes vence.
Geléia ,
87 bytesExperimente online! Obrigado a @Dennis por -1 byte.
fonte
ÆDÆfU$Þ
(usando a nova classificação de Jelly), salva um byte.Pitão, 10 bytes
Experimente online: Demonstração
Infelizmente, o produto em uma lista vazia não está definido como 1 em Pyth. Isso custa três bytes extras.
Explicação:
fonte
Gelatina ,
1210 bytes2 bytes graças a @ Sp3000.
Experimente online!
Suíte de teste.
Créditos ao @ Sp3000 por apresentar o formato da explicação.
fonte
Python 2, 85 bytes
Sem fatoração, sem classificação. Implementação recursiva do mesmo comprimento:
fonte
Na verdade, 19 bytes
Experimente online!
Explicação:
fonte
JavaScript, 78 bytes
Com base na idéia do @ xnor, embora eu não tenha entendido o código dele, tive que reimplementá-lo do zero. O algoritmo básico é que você começa com [1] e multiplica por [1, ..., p] para cada p na fatoração primária de n, embora, como eu não possua fatoração primária ou produto cartesiano, eu tenho que fazê-lo tudo recursivamente. Exemplo:
fonte
R, 196 bytes
Isso vai ser ineficiente pra caramba, porque quase não resisti à tentação de usar
library(primes)
. Ele cria um vetord
de todos os fatores primos da entrada, calcula sua frequência (número de ocorrências) e calcula o produto cartesiano de todas as potências possíveis (de 0 à respectiva frequênciab[i]
), às quais aprod
função é aplicada. Dang-lo, casos especiais de 2 e 3! Caso contrário, essa é uma boa demonstração do manuseio do quadro de dados R e das funções vetoriais / operações por linha (e até atable
função puramente estatística !).Obviamente, sua eficiência pode ser melhorada ao custo de 15 bytes
r=2:ceiling(sqrt(n))
, se alguém se importar. Aqui está uma versão melhor e não-destruída:fonte
Mathematica 150 bytes
fonte
Braquilog , 3 bytes
Experimente online!
O código lê mais ou menos exatamente como o título do desafio: "os fatores da entrada, classificados por suas decomposições primárias". Garantir que essa beleza de 3 bytes realmente passasse nos casos de teste usando apenas o senso interno de Brachylog de como classificar listas acabou exigindo que eu copiasse e cole todos esses números no Clojure REPL, onde os elementos da lista são separados por espaços em branco e vírgulas são espaços em branco, mas acabou que realmente funciona.
fonte
APL (Dyalog Extended) , 17 bytes
Muito obrigado a ngn e Adám por sua ajuda no golfe desses dois programas da APL no The APL Orchard , um ótimo lugar para aprender APL e obter ajuda da APL.
Experimente online!
Ungolfing
APL (Dyalog Unicode) , SBCS de 29 bytes
Experimente online!
Ungolfing
fonte
J,
3231 bytesPega as listas de números primos e expoentes do número inteiro de entrada, inverte cada um e constrói os divisores a partir disso.
Uso
Explicação
fonte
Ruby, 71 bytes
Esta resposta é baseada na resposta Python 2 do xnor.
Uma alternativa do mesmo comprimento é:
Ungolfing:
fonte
Japonês ,
129 bytes-3 bytes graças a @Shaggy
Experimente online!
fonte
Japonês, 7 bytes
Execute-o online
fonte
Mathematica, 56 bytes
fonte