Un enfant curieux utilise un programme qui peut factoriser un nombre ou une expression sous la forme suivante: p1^e1 * p2^e2 * ... * pn^en
. Les exposants égaux à 1
sont omis par exemple360 = 2^3 * 3^2 * 5
L'enfant saisit cette sortie dans le programme en tant que nouvelle entrée, mais elle ne comprend pas le ^
signe, donc parfois elle ignore un ou plusieurs de ceux qui concaténent la base principale et l'exposant correspondants. Par exemple(360 =) 2^3 * 3^2 * 5 => 2^3 * 32 * 5 (= 1280)
En raison de ces erreurs, elle peut obtenir une factorisation différente qu'elle peut saisir à nouveau (en sautant 0 ou plus ^
). Elle répète le processus jusqu'à ce que la factorisation ne change plus (peut-être qu'il n'y en a plus ^
ou elle a copié la sortie correctement).
Vous devez écrire un programme ou une fonction qui, avec un entier n
( n>1
), affiche tous les nombres possibles dans un ordre croissant dont la factorisation pourrait être celle avec laquelle l'enfant s'est retrouvé (y compris n
). Par exemple, pour l'entrée, 16
les factorisations finales possibles sont(16 =) 2^4, (24 =) 2^3 * 3, (23*3 =) 3 * 23
Détails d'entrée:
- l'entrée est un seul entier plus grand que
1
- aucune entrée ne sera donnée qui génère un nombre de sortie supérieur à
2^31-1
- aucune entrée ne sera donnée qui génère plus que
1000
des nombres de sortie
Détails de sortie:
- une liste d'entiers dans une forme pratique pour votre langue
Exemples:
Entrée => Sortie
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
C'est le golf de code, donc le programme le plus court gagne.
Réponses:
CJam - 66
Essayez-le sur http://cjam.aditsu.net/
Explication:
(*) Merci Martin
la source
^
peut être supprimé en une seule étape. Donc,58564 = 2^2 * 11^4
il devrait pouvoir générer2508 = 22 * 114
.Rubis, 219
Pour commencer:
Crée une fonction renvoyant un tableau de nombres.
https://ideone.com/iOMGny
Utilisez-le comme ceci:
C'est tellement amusant d'écrire tout cela sur un téléphone mobile ...
la source
Perl, 193 octets
Les nouvelles lignes sont juste ajoutées pour plus de lisibilité.
La boucle for factorise le nombre suivant (
$x
) en un hachage (%f
) de nombres premiers et de puissances. La fonction récursive (R
) utilise ce hachage pour générer tous les nombres qui pourraient être atteints en supprimant les^
signes. Ces nombres sont ajoutés à une file d'attente (@q
) et le processus est répété par la boucle while externe. Chaque numéro de la file d'attente est également conservé dans un tableau unique trié (@r
) pour l'impression.la source
Pyth,
464544Essayez-le ici.
Correction du
^
bug multiple . Par exemple:Notez que ce code s'appuie sur quelques corrections de bogues du compilateur officiel qui ont été poussées après que la question a été posée. Cependant, il n'utilise pas de nouvelles fonctionnalités linguistiques.
la source
u
) à l'intérieur d'une autre réduction était impossible. J'ai changé un 2 en un 3 à l'emplacement approprié afin que la réduction prenne 3 entrées au lieu de 2. C'est tout.