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
źródło
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.Odpowiedzi:
Haskell, 56 bajtów
(2!)(1338557220::Int)
drukuje w ciągu pięciu minut na moim laptopie po skompilowaniughc -O3
.Haskell, 62 bajty, ale znacznie szybciej
(2!)(1338557220::Int)
drukuje w kwadrans na moim laptopie, po skompilowaniughc -O3
.źródło
ghc
daje miParse error: naked expression at top level
ighci
dajeparse error on input `='
(2!)
na programmain = print ((2!) (1338557220::Int))
, skompilujghc -O3 factor.hs
i uruchom z./factor
.Pyth, 29 bajtów
Wypróbuj online
Działa za dwadzieścia sekund
1338557220
na moim laptopie.źródło
pyth factor.pyth
(lubpyth -c 'Msam+Ldgd/Hdf!%HT>S@H2tG]]Hg2'
), podając16
na standardowe wejście . Upewnij się, że używasz aktualnej wersji Pyth; domniemanyQ
został dodany w marcu. Nie mogę sobie jednak wyobrazić, jak można uzyskać podział na zero."
zamiast'
, a bash rozwijał!%
coś innego.Python ,
2523133123111451411371351038483 bajtówJest to w dużej mierze oparte na pytaniu Andersa Kaseorga . Wszelkie sugestie dotyczące gry w golfa są mile widziane. Wypróbuj online!
Edycja: 19 bajtów golfowych dzięki Dennisowi. Naprawiono literówkę w kodzie i dodano link TIO.
Nie golfowany:
źródło
**.5
pozbywa się importu.JavaScript (ES6), 83 bajty
Pożyczyłem tylko sztuczkę @ pierwiastka kwadratowego @ AndersKaseorga, ponieważ ostatecznie zaoszczędziło mi bajtów. Drukuje
1
dla wejścia1
, w przeciwnym razie nie drukuje1
s.źródło
Ruby 1.9+,
878987 bajtówTa odpowiedź oparta jest na pytaniu Andersa Kaseorga . Ten kod działa tylko w wersjach po Ruby 1.9, ponieważ stabilne lambdy
->
zostały wprowadzone tylko w wersji 1.9. Wszelkie sugestie dotyczące gry w golfa są mile widziane.Nie golfowany:
źródło
g[n/d,d]
:wrong number of arguments (0 for 1)
->
zostały wprowadzone w Ruby 1.9. Zmienię odpowiedź, aby wyświetlić wymagany numer wersji.g[n/d,d]
.g(n/d,d)
jest bardziej kompatybilny wstecz.f[n]
wymagane jest nazywanie mocnych lambdas i Ruby lambdas w ogóle.f(n)
if n
połączenia wymagajądef
iend
. Więcej informacji tutaj i tutajJ, 52 bajty
Nie tak wydajne, jak mogłoby być, ponieważ niektóre czynniki mogą być powtarzane, a po sortowaniu każdej faktoryzacji, a następnie usuwaniu duplikatów, należy wykonać końcowe przejście.
Wypróbuj online! (Ale staraj się utrzymywać małe wartości wejściowe).
Na moim pulpicie są czasy
Wyjaśnienie
Ta metoda polega na generowaniu wszystkich ustawionych partycji dla czynników pierwszych wejściowej liczby całkowitej n . Wydajność jest najlepsza, gdy n nie zawiera kwadratów, w przeciwnym razie zostaną utworzone zduplikowane czynniki.
źródło