Une collection d'entiers positifs d_1 d_2 ... d_k
est une factorisation d'un entier positif n
si
d_1 * d_2 * ... * d_k = n
Chaque entier positif a une factorisation première unique , mais en général ils ont aussi des factorisations dans lesquelles certains des termes sont composites. Par exemple
12 = 6 * 2 = 4 * 3 = 3 * 2 * 2
Écrivez un programme, une fonction, un verbe ou similaire qui prend en entrée un seul entier positif et retourne ou imprime une liste complète de ses factorisations distinctes. Les factorisations peuvent être produites dans n'importe quel ordre, et leurs termes peuvent être dans n'importe quel ordre, mais il ne doit pas y avoir de permutations mutuelles. Les factorisations peuvent ne pas inclure 1
à deux exceptions près: pour l'entrée, n
vous pouvez donner la factorisation n*1
au lieu de n
; et pour l'entrée, 1
vous pouvez donner la factorisation 1
au lieu de la liste vide.
Vous pouvez supposer que l'entrée sera dans la plage d'un entier 32 bits signé. Si la sortie est une chaîne, il devrait y avoir une distinction claire entre la délimitation des nombres au sein d'une factorisation et la délimitation des factorisations, mais il n'est pas nécessaire (par exemple) que les facteurs soient joints à un *
.
Votre code doit être capable de gérer toute entrée valide dans les 10 minutes sur une machine de bureau raisonnable.
Exemples
1 [[]]
or [[1]]
or [[1 1]]
7 [[7]]
or [[7 1]]
or [[1 7]]
12 [[12] [6 2] [4 3] [2 3 2]]
or variants
16 [[2 2 2 2] [2 2 4] [2 8] [4 4] [16]]
or variants
901800900 a list of 198091 factorisations
1338557220 a list of 246218 factorisations
901800900
et1338557220
quelque part où nous pouvons les vérifier? Mon code me donne 2048 et 1024 factorisations pour ces nombres, respectivement, et je ne sais pas pourquoi.