Biorąc pod uwagę liczbę całkowitą ≥ 2, wypisz listę jej dzielników posortowaną według wykładników w ich pierwszych rozkładach na czynniki pierwsze, w porządku rosnącym, najpierw według największej liczby pierwszej, a następnie według drugiej największej liczby, i tak dalej.
Jako przykład weźmy liczbę całkowitą 72, która wynosi 2 3 3 2 . Ma dzielniki
1 3^0 · 2^0
2 3^0 · 2^1
3 3^1 · 2^0
4 3^0 · 2^2
6 3^1 · 2^1
8 3^0 · 2^3
9 3^2 · 2^0
12 3^1 · 2^2
18 3^2 · 2^1
24 3^1 · 2^3
36 3^2 · 2^2
72 3^2 · 2^3
Po posortowaniu według wykładników według czynników pierwszych, przy czym większe liczby pierwsze mają pierwszeństwo, staje się to
1 3^0 · 2^0
2 3^0 · 2^1
4 3^0 · 2^2
8 3^0 · 2^3
3 3^1 · 2^0
6 3^1 · 2^1
12 3^1 · 2^2
24 3^1 · 2^3
9 3^2 · 2^0
18 3^2 · 2^1
36 3^2 · 2^2
72 3^2 · 2^3
Zauważ, że lista jest sortowana najpierw według kolejności wykładnika 3, a następnie wykładnika 2. Można również myśleć o tym jako o czytaniu od lewej do prawej i od góry do dołu w następującej siatce:
2^0 2^1 2^2 2^3
3^0 1 2 4 8
3^1 3 6 12 24
3^2 9 18 36 72
Przypadki testowe:
2 => 1 2
72 => 1 2 4 8 3 6 12 24 9 18 36 72
101 => 1 101
360 => 1 2 4 8 3 6 12 24 9 18 36 72 5 10 20 40 15 30 60 120 45 90 180 360
3780 => 1 2 4 3 6 12 9 18 36 27 54 108 5 10 20 15 30 60 45 90 180 135 270 540 7 14 28 21 42 84 63 126 252 189 378 756 35 70 140 105 210 420 315 630 1260 945 1890 3780
30030 => 1 2 3 6 5 10 15 30 7 14 21 42 35 70 105 210 11 22 33 66 55 110 165 330 77 154 231 462 385 770 1155 2310 13 26 39 78 65 130 195 390 91 182 273 546 455 910 1365 2730 143 286 429 858 715 1430 2145 4290 1001 2002 3003 6006 5005 10010 15015 30030
65536 => 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536
74088 => 1 2 4 8 3 6 12 24 9 18 36 72 27 54 108 216 7 14 28 56 21 42 84 168 63 126 252 504 189 378 756 1512 49 98 196 392 147 294 588 1176 441 882 1764 3528 1323 2646 5292 10584 343 686 1372 2744 1029 2058 4116 8232 3087 6174 12348 24696 9261 18522 37044 74088
Ponieważ jest to code-golf , wygrywa najkrótszy kod w bajtach.
Galaretka ,
87 bajtówWypróbuj online! Dzięki @Dennis za -1 bajtów.
źródło
ÆDÆfU$Þ
(używając nowego sortowania według Jelly), zapisuje bajt.Pyth, 10 bajtów
Wypróbuj online: demonstracja
Niestety produkt na pustej liście nie jest zdefiniowany jako 1 w Pyth. To kosztuje trzy dodatkowe bajty.
Wyjaśnienie:
źródło
Galaretka ,
1210 bajtów2 bajty dzięki @ Sp3000.
Wypróbuj online!
Zestaw testowy.
Podziękowania dla @ Sp3000 za opracowanie formatu wyjaśnienia.
źródło
Python 2, 85 bajtów
Bez faktoryzacji, bez sortowania. Implementacja rekurencyjna tej samej długości:
źródło
Właściwie 19 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
JavaScript, 78 bajtów
Oparty na pomyśle @ xnora, chociaż nie rozumiałem jego kodu, więc musiałem go zaimplementować od podstaw. Podstawowy algorytm polega na tym, że zaczynasz od [1] i mnożnik przez [1, ..., pᵏ] dla każdego pᵏ w pierwszej faktoryzacji n, chociaż ponieważ nie mam faktoryzacji pierwszej ani iloczynu kartezjańskiego, muszę to zrobić wszystko rekurencyjnie. Przykład:
źródło
R 196 bajtów
To będzie nieefektywne, do cholery, ponieważ prawie nie oparłem się pokusie używania
library(primes)
. Tworzy wektord
wszystkich głównych czynników wejściowych, oblicza ich częstotliwość (liczbę wystąpień), a następnie oblicza iloczyn kartezjański wszystkich możliwych mocy (od 0 do odpowiedniej częstotliwościb[i]
), do którychprod
stosowana jest funkcja. Cholera, specjalne przypadki 2 i 3! W przeciwnym razie jest to dobra prezentacja obsługi ramek danych R i funkcji wektorowych / operacji po wierszu (a nawet funkcji czysto statystycznejtable
!).Oczywiście jego wydajność można poprawić kosztem 15 bajtów
r=2:ceiling(sqrt(n))
, jeśli ktoś się tym przejmuje. Oto ładniejsza wersja bez golfisty:źródło
Mathematica 150 bajtów
źródło
Brachylog , 3 bajty
Wypróbuj online!
Kod czyta mniej więcej tak, jak tytuł wyzwania: „czynniki wejściowe, posortowane według ich głównych rozkładów”. Upewnienie się, że ta 3-bajtowa piękność faktycznie przeszła przypadki testowe, wykorzystując tylko wbudowane wyczucie Brachylog dotyczące sortowania list, w końcu wymagało ode mnie skopiowania i wklejenia wszystkich tych liczb do REPL Clojure, gdzie elementy listy są oddzielone białymi spacjami i przecinki są spacjami, ale okazało się, że to naprawdę działa.
źródło
APL (Dyalog Extended) , 17 bajtów
Ogromne podziękowania dla ngn i Adám za pomoc w grze w golfa w obu programach APL w APL Orchard , doskonałym miejscu do nauki APL i uzyskania pomocy APL.
Wypróbuj online!
Ungolfing
APL (Dyalog Unicode) , 29 bajtów SBCS
Wypróbuj online!
Ungolfing
źródło
J,
3231 bajtówPobiera listy liczb pierwszych i wykładników liczby całkowitej wejściowej, odwraca każdą z nich i tworzy z niej dzielniki.
Stosowanie
Wyjaśnienie
źródło
Rubinowy, 71 bajtów
Ta odpowiedź jest oparta na odpowiedzi xnor na Python 2.
Alternatywą tej samej długości jest:
Ungolfing:
źródło
Japt ,
129 bajtów-3 bajty dzięki @Shaggy
Wypróbuj online!
źródło
Japt, 7 bajtów
Uruchom to online
źródło
Mathematica, 56 bajtów
źródło