Une collection d'entiers positifs d_1 d_2 ... d_kest une factorisation d'un entier positif nsi
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, nvous pouvez donner la factorisation n*1au lieu de n; et pour l'entrée, 1vous pouvez donner la factorisation 1au 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
          
901800900et1338557220quelque 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.