Um garoto curioso usa um programa que pode fatorar um número ou uma expressão na seguinte forma: p1^e1 * p2^e2 * ... * pn^en
. Os expoentes iguais a 1
são omitidos, por exemplo360 = 2^3 * 3^2 * 5
A criança digita essa saída no programa como uma nova entrada, mas ela não entende o ^
sinal; por vezes, ignora um ou mais daqueles que concatenam a base principal e o expoente correspondentes. Por exemplo(360 =) 2^3 * 3^2 * 5 => 2^3 * 32 * 5 (= 1280)
Devido a esses erros, ela pode obter uma fatoração diferente, que pode inserir novamente (com o pulo de 0 ou mais ^
). Ela repete o processo até que a fatoração não mude mais (talvez não exista mais ^
ou ela copiou a saída corretamente).
Você deve escrever um programa ou função que, dado um número inteiro n
( n>1
), produza todos os números possíveis em ordem crescente, cuja fatoração pode ser aquela com a qual o garoto terminou (inclusive n
). Por exemplo, para entrada, 16
as possíveis fatorações finais são(16 =) 2^4, (24 =) 2^3 * 3, (23*3 =) 3 * 23
Detalhes da entrada:
- entrada é um único inteiro maior que
1
- nenhuma entrada será fornecida, o que gera um número de saída maior que
2^31-1
- nenhuma entrada será fornecida, o que gera mais do que
1000
números de saída
Detalhes da saída:
- uma lista de números inteiros de forma conveniente para o seu idioma
Exemplos:
Entrada => Saída
11 => 11
16 => 16 24 69
360 => 140 360 770 1035 1219 1280 2875 3680
605 => 560 605 840 2415
2048 => 211 2048
58564 => 230 456 1311 2508 9975 12768 13794 20748 58564 114114 322102
Este é o código-golfe, e o programa mais curto vence.
Respostas:
CJam - 66
Experimente em http://cjam.aditsu.net/
Explicação:
(*) Obrigado Martin
fonte
^
's pode ser removida em uma etapa. Então, para58564 = 2^2 * 11^4
isso deve ser capaz de gerar2508 = 22 * 114
.Ruby, 219
Para começar isso:
Cria uma função s retornando uma matriz de números.
https://ideone.com/iOMGny
Use-o assim:
Tão divertido escrever isso tudo isso em um celular ...
fonte
Perl, 193 bytes
Novas linhas são adicionadas apenas para facilitar a leitura.
O loop for fatoriza o próximo número (
$x
) em um hash (%f
) de primos e potências. A função recursiva (R
) usa esse hash para gerar todos os números que poderiam ser obtidos com a remoção de^
sinais. Esses números são adicionados a uma fila (@q
) e o processo é repetido pelo loop while externo. Cada número da fila também é mantido em uma matriz classificada exclusiva (@r
) para impressão.fonte
Pyth,
464544Experimente aqui.
Corrigido o
^
erro múltiplo . Por exemplo:Observe que esse código depende de algumas correções no compilador oficial que foram enviadas após a pergunta. No entanto, ele não usa nenhum novo recurso de idioma.
fonte
u
) dentro de outro reduz era impossível. Mudei um 2 para um 3 no local apropriado, de modo que a redução levaria 3 entradas em vez de 2. Isso é tudo.