Un nombre hautement composite est un entier positif qui a plus de diviseurs que n'importe quel entier positif plus petit. Il s'agit de la séquence OEIS A002182 . Ses 20 premiers mandats sont
1, 2, 4, 6, 12, 24, 36, 48, 60, 120, 180, 240, 360, 720, 840, 1260, 1680, 2520, 5040, 7560
Par exemple, 4
est dans la séquence car il a 3 diviseurs (à savoir 1, 2, 4), tandis que 3 n'a que 2 diviseurs, 2 a également 2 diviseurs et 1 a 1 diviseurs.
Défi
Étant donné une entrée entière positive n , sortez le n- ème nombre hautement composite ou les n premiers nombres hautement composites, à votre choix (mais le choix doit être le même pour chaque entrée n ).
Règles
Le programme ou la fonction devrait théoriquement fonctionner pour des entrées arbitrairement grandes étant donné un temps et une mémoire infinis, et sans tenir compte des limitations du type de données. Essentiellement, cela signifie qu'il n'est pas nécessaire de coder en dur un nombre fini de valeurs.
En pratique, le programme ou la fonction doit s'exécuter dans un laps de temps raisonnable, disons moins de 1 minute, pour n jusqu'à 20. L'entrée ou la sortie maximale peut être limitée par le type de données standard de votre langue (mais encore une fois, l'algorithme devrait théoriquement fonctionner pour des nombres arbitrairement grands).
Tout format d'entrée et de sortie raisonnable est autorisé, y compris unaire.
Code golf. Le moins d'octets gagne.
la source
Réponses:
05AB1E ,
1514 octetsL'entrée est indexée zéro. Cela signifie que
n = 0
donne1
,n = 1
donne2
, etc. Code:Explication:
Calcule n = 19 , ce qui devrait donner
7560
environ 10 secondes.Essayez-le en ligne!
Utilise l' encodage CP-1252 .
la source
Gelée, 15 octets
Pour l'entrée n , cela imprime les n premiers nombres hautement composites.
Pour n = 20 , cela prend moins de deux secondes sur Essayez-le en ligne!
Comment ça marche
Version alternative, 13 octets (non concurrente)
Alors que le code ci-dessous fonctionnait dans la dernière version de Jelly qui précède ce défi, la mise en œuvre de
M
était très lente et ne respectait pas le délai. Cela a été corrigé.Essayez-le en ligne!
Comment ça marche
la source
RÆDL€MḢ=µƓ#
(11 octets), mais cela prend 44 minutes sur ma machine ...MATL ,
2624 octetsEssayez-le en ligne!
Le plus grand nombre actuel de diviseurs trouvés est conservé dans le presse-papiers K. Les nombres hautement composites (HCN) sont conservés directement sur la pile. Une boucle continue de tester les candidats à HCN. Une fois trouvé, il reste sur la pile et le presse-papiers K est mis à jour. La boucle se termine lorsque le nombre souhaité de HCN a été trouvé.
la source
Perl,
6057 + 1 = 58 octetsRequiert
-n
et gratuit-M5.010
|-E
:Comment ça marche:
la source
JavaScript (ES6) 72
Mise en œuvre simple. Temps proche de 20 s pour l'entrée 20
L'astuce eval pourrait économiser un octet doublant le temps d'exécution
Moins golfé
la source
Pyth,
1716 octets1 octet grâce à Jakube
Suite de tests
Prend un n indexé 0 et retourne le nième nombre hautement composite.
Explication:
la source
Rubis,
706967666462Mise en œuvre simple.
la source
C, 98 octets
Essayez-le ici .
Non golfé
la source
Python 3, 97 octets
Un programme complet qui prend l'entrée de STDIN et imprime la sortie sur STDOUT. Cela renvoie le
n
th nombre hautement composite indexé sur 1.Comment ça marche
Il s'agit d'une implémentation simple. L'entrée
n
est l'indice numérique hautement composite.Le programme parcourt les entiers
i
. Pour chaque entierj
inférieur ài
,i mod j
est pris; si c'est le cas0
,j
doit être un facteur dei
et le compteurc
est incrémenté, donnant le nombre de diviseurs d'i
after looping.p
est le nombre de diviseurs le plus élevé précédent, donc sic > p
, un nouveau nombre hautement composite a été trouvé et que le compteurq
est incrémenté. Une foisq = n
,i
doit être len
numéro hautement composite, et celui-ci est imprimé.Essayez-le sur Ideone
(Cela prend ~ 15 secondes pour
n = 20
, ce qui dépasse la limite de temps pour Ideone. Par conséquent, l'exemple donné est pourn = 18
.)la source
Python 2, 207 octets
Utilise la même méthode que la réponse Jelly de Dennis. Calcule les 20 premiers termes en
<2
secondes.la source