Zbiór dodatnich liczb całkowitych d_1 d_2 ... d_k
jest faktoryzacją dodatniej liczby całkowitej, n
jeśli
d_1 * d_2 * ... * d_k = n
Każda dodatnia liczba całkowita ma unikalną faktoryzację pierwszą , ale generalnie mają one również faktoryzacje, w których niektóre terminy są złożone. Na przykład
12 = 6 * 2 = 4 * 3 = 3 * 2 * 2
Napisz program, funkcję, czasownik lub podobne, które przyjmują jako dane wejściowe jedną dodatnią liczbę całkowitą i zwracają lub drukują pełną listę ich odrębnych faktoryzacji. Rozkłady na czynniki mogą być tworzone w dowolnej kolejności, a ich warunki mogą być w dowolnej kolejności, ale żadne z nich nie powinno być wzajemnymi permutacjami. Faktoryzacje mogą nie obejmować 1
dwóch wyjątków: dla danych wejściowych n
można podać faktoryzację n*1
zamiast n
; a dla danych wejściowych 1
możesz podać faktoryzację 1
zamiast pustej listy.
Możesz założyć, że wejście będzie w zakresie 32-bitowej liczby całkowitej ze znakiem. Jeśli dane wyjściowe są w postaci ciągu, powinno być wyraźne rozróżnienie między delimitacją liczb w ramach faktoryzacji i delimitacją faktoryzacji, ale nie jest konieczne (na przykład) łączenie czynników z *
.
Twój kod powinien być w stanie obsłużyć wszelkie prawidłowe dane wejściowe w ciągu 10 minut na rozsądnym komputerze stacjonarnym.
Przykłady
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
i1338557220
gdzieś, gdzie możemy je sprawdzić? Mój kod podaje mi odpowiednio 2048 i 1024 faktoryzacji dla tych liczb i nie jestem pewien, dlaczego.