Um número altamente composto é um número inteiro positivo que possui mais divisores do que qualquer número inteiro positivo menor. Esta é a sequência O00E A002182 . Seus primeiros 20 termos são
1, 2, 4, 6, 12, 24, 36, 48, 60, 120, 180, 240, 360, 720, 840, 1260, 1680, 2520, 5040, 7560
Por exemplo, 4
está na sequência porque possui 3 divisores (1, 2, 4), enquanto 3 possui apenas 2 divisores, 2 também possui 2 divisores e 1 possui 1 divisores.
Desafio
Dada uma entrada inteira positiva n , imprima o n- ésimo número altamente composto ou o primeiro n número altamente composto, à sua escolha (mas a escolha deve ser a mesma para cada entrada n ).
Regras
O programa ou função deve, teoricamente, trabalhar para entradas arbitrariamente grandes, com tempo e memória infinitos, e sem considerar as limitações do tipo de dados. Essencialmente, isso significa que não é necessário codificar um número finito de valores.
Na prática, o programa ou função deve ser executado em um período de tempo razoável, digamos menos de 1 minuto, por n até 20. A entrada ou saída máxima pode ser limitada pelo tipo de dados padrão do seu idioma (mas, novamente, teoricamente, o algoritmo deve funcionar para números arbitrariamente grandes).
Qualquer formato de entrada e saída razoável é permitido, inclusive unário.
Código de golfe. Menos bytes ganha.
fonte
Respostas:
05AB1E ,
1514 bytesA entrada é indexada a zero. Isso significa que
n = 0
dá1
,n = 1
dá2
, etc. Código:Explicação:
Calcula n = 19 , que deve dar
7560
em cerca de 10 segundos.Experimente online!
Usa a codificação CP-1252 .
fonte
Gelatina, 15 bytes
Para a entrada n , imprime os primeiros n números altamente compostos.
Para n = 20 , leva menos de dois segundos em Experimente online!
Como funciona
Versão alternativa, 13 bytes (não concorrente)
Enquanto o código abaixo funcionava na versão mais recente do Jelly que precede esse desafio, a implementação de
M
era muito lenta e não estava em conformidade com o prazo. Isso foi corrigido.Experimente online!
Como funciona
fonte
RÆDL€MḢ=µƓ#
(11 bytes), mas leva 44 minutos na minha máquina ...MATL ,
2624 bytesExperimente online!
O maior número atual de divisores encontrados é mantido na área de transferência K. Os números altamente compostos (HCN) são mantidos diretamente na pilha. Um loop mantém o teste de candidatos à HCN. Quando um é encontrado, ele é deixado na pilha e a área de transferência K é atualizada. O loop termina quando o número desejado de HCN foi encontrado.
fonte
Perl,
6057 + 1 = 58 bytesRequer
-n
e grátis-M5.010
|-E
:Como funciona:
fonte
JavaScript (ES6) 72
Implementação direta. Tempo próximo a 20 s para a entrada 20
O truque eval poderia salvar um byte dobrando o tempo de execução
Menos golfe
fonte
Pitão,
1716 bytes1 byte graças a Jakube
Suíte de teste
Pega um n indexado a 0 e retorna o enésimo número altamente composto.
Explicação:
fonte
Ruby,
706967666462Implementação direta.
fonte
C, 98 bytes
Experimente aqui .
Ungolfed
fonte
Python 3, 97 bytes
Um programa completo que recebe a entrada de STDIN e imprime a saída em STDOUT. Isso retorna o
n
número altamente composto composto de 1 índice.Como funciona
Esta é uma implementação direta. A entrada
n
é o índice numérico altamente composto.O programa itera sobre os números inteiros
i
. Para cada número inteiroj
menor quei
,i mod j
é obtido; se for0
,j
deve ser um fator dei
e o contadorc
é incrementado, fornecendo o número de divisores dei
após o loop.p
é o número mais alto anterior de divisores; portanto, sec > p
um novo número altamente composto for encontrado e o contadorq
for incrementado. Uma vezq = n
,i
deve ser on
th número altamente composto, e isso é impresso.Experimente no Ideone
(Isso leva aproximadamente 15 segundos para
n = 20
, o que excede o limite de tempo para Ideone. Portanto, o exemplo fornecido é paran = 18
.)fonte
Python 2, 207 bytes
Usa o mesmo método da resposta de Dennis 'Jelly. Calcula os primeiros 20 termos em
<2
segundos.fonte