Bei einer Eingabe einer ganzen Zahl ≥ 2 wird eine Liste der Divisoren ausgegeben, die nach Exponenten in ihren Primfaktoren in aufsteigender Reihenfolge sortiert sind, wobei zuerst nach der größten Primzahl, dann nach der zweitgrößten und so weiter geordnet wird.
Nehmen Sie als Beispiel die Ganzzahl 72, die 2 3 3 2 ist . Es hat die Teiler
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
In aufsteigender Reihenfolge nach den Exponenten der Primfaktoren sortiert, wobei größere Primzahlen Vorrang haben, wird dies
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
Beachten Sie, dass die Liste zuerst nach der Reihenfolge des Exponenten von 3 und dann nach dem Exponenten von 2 sortiert ist. Sie können sich dies auch so vorstellen, dass Sie über das folgende Raster von links nach rechts und von oben nach unten lesen:
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
Testfälle:
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
Da es sich um Code-Golf , der kürzeste Code in Bytes gewinnt.
Gelee ,
87 BytesProbieren Sie es online!Vielen Dank an @Dennis für -1 Byte.
quelle
ÆDÆfU$Þ
(unter Verwendung von Jellys neuem Sortieren nach), speichert ein Byte.Pyth, 10 Bytes
Probieren Sie es online aus: Demonstration
Leider ist das Produkt über einer leeren Liste in Pyth nicht als 1 definiert. Dies kostet drei zusätzliche Bytes.
Erläuterung:
quelle
Gelee ,
1210 Bytes2 Bytes dank @ Sp3000.
Probieren Sie es online!
Testsuite.
Dank an @ Sp3000 für das Format der Erklärung.
quelle
Python 2, 85 Bytes
Keine Faktorisierung, keine Sortierung. Rekursive Implementierung gleicher Länge:
quelle
Eigentlich 19 Bytes
Probieren Sie es online!
Erläuterung:
quelle
JavaScript, 78 Byte
Basierend auf der Idee von @ xnor, obwohl ich seinen Code nicht verstand, musste ich ihn von Grund auf neu implementieren. Der grundlegende Algorithmus ist, dass Sie mit [1] beginnen und mit [1, ..., pᵏ] für jedes pᵏ in der Primfaktorisierung von n multiplizieren, obwohl ich keine Primfaktorisierung oder kein kartesisches Produkt habe, das ich tun muss alles rekursiv. Beispiel:
quelle
R, 196 Bytes
Dies wird zum Teufel ineffizient sein, weil ich der Versuchung des Gebrauchs kaum widerstanden habe
library(primes)
. Es erstellt einen Vektord
aller Primfaktoren der Eingabe, berechnet deren Häufigkeit (Anzahl der Vorkommen) und berechnet dann das kartesische Produkt aller möglichen Potenzen (von 0 bis zur jeweiligen Häufigkeitb[i]
), auf die dieprod
Funktion angewendet wird. Verdammt, Sonderfälle von 2 und 3! Ansonsten ist dies ein schönes Beispiel für die Handhabung von R-Datenrahmen und Vektorfunktionen / zeilenweise Operationen (und sogar für rein statistische Operationen)table
Funktion!).Natürlich kann seine Effizienz auf Kosten von 15 Bytes verbessert werden
r=2:ceiling(sqrt(n))
, wenn sich jemand darum kümmert. Hier ist eine schönere ungolfed Version:quelle
Mathematica 150 Bytes
quelle
Brachylog , 3 Bytes
Probieren Sie es online!
Der Code lautet mehr oder weniger wie der Titel der Herausforderung: "Die Faktoren der Eingabe, sortiert nach ihren primären Zerlegungen". Um sicherzustellen, dass diese 3-Byte-Schönheit die Testfälle tatsächlich bestanden hat, musste ich die vielen Zahlen kopieren und in den Clojure REPL einfügen, wobei die Listenelemente durch Leerzeichen und voneinander getrennt sind Kommas sind Leerzeichen, aber es stellte sich heraus, dass es tatsächlich funktioniert.
quelle
APL (Dyalog Extended) , 17 Byte
Vielen Dank an ngn und Adám für ihre Hilfe beim Golfspielen dieser beiden APL-Programme in The APL Orchard , einem großartigen Ort, um APL zu lernen und APL-Hilfe zu erhalten.
Probieren Sie es online!
Ungolfing
APL (Dyalog Unicode) , 29 Byte SBCS
Probieren Sie es online!
Ungolfing
quelle
J
3231 BytesErgreift die Listen der Primzahlen und Exponenten der Eingabe-Ganzzahl, kehrt jede um und baut die Divisoren daraus auf.
Verwendung
Erläuterung
quelle
Ruby, 71 Bytes
Diese Antwort basiert auf der Python 2-Antwort von xnor.
Eine Alternative gleicher Länge ist:
Ungolfing:
quelle
Japt ,
129 Bytes-3 Bytes dank @Shaggy
Probieren Sie es online!
quelle
Japt, 7 Bytes
Führen Sie es online aus
quelle
Mathematica, 56 Bytes
quelle