Una raccolta di numeri interi positivi d_1 d_2 ... d_k
è una fattorizzazione di un numero intero positivo n
se
d_1 * d_2 * ... * d_k = n
Ogni numero intero positivo ha una fattorizzazione primaria unica , ma in generale ha anche fattori in cui alcuni termini sono composti. Per esempio
12 = 6 * 2 = 4 * 3 = 3 * 2 * 2
Scrivi un programma, una funzione, un verbo o simile che accetta come input un singolo intero positivo e restituisce o stampa un elenco completo delle sue distinte fattorizzazioni. Le fattorizzazioni possono essere prodotte in qualsiasi ordine e i loro termini possono essere in qualsiasi ordine, ma non due dovrebbero essere permutazioni l'una dell'altra. Le fattorizzazioni potrebbero non includere 1
due eccezioni: per input n
si può dare la fattorizzazione n*1
invece di n
; e per input 1
puoi dare la fattorizzazione 1
invece dell'elenco vuoto.
Si può presumere che l'ingresso sarà compreso nell'intervallo di un numero intero a 32 bit con segno. Se l'output è una stringa, dovrebbe esserci una chiara distinzione tra la delimitazione dei numeri all'interno di una fattorizzazione e la delimitazione delle fattorizzazioni, ma non è necessario (ad esempio) che i fattori siano uniti a un *
.
Il tuo codice dovrebbe essere in grado di gestire qualsiasi input valido entro 10 minuti su una macchina desktop ragionevole.
Esempi
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
e1338557220
da qualche parte dove possiamo verificarle? Il mio codice mi dà 2048 e 1024 fattorizzazioni per quei numeri, rispettivamente, e non sono sicuro del perché.