Eine Sammlung von positiven ganzen Zahlen d_1 d_2 ... d_k
ist eine Faktorisierung einer positiven ganzen Zahl, n
wenn
d_1 * d_2 * ... * d_k = n
Jede positive ganze Zahl hat eine eindeutige Primfaktorisierung , aber im Allgemeinen haben sie auch Faktorisierungen, in denen einige der Begriffe zusammengesetzt sind. Z.B
12 = 6 * 2 = 4 * 3 = 3 * 2 * 2
Schreiben Sie ein Programm, eine Funktion, ein Verb oder Ähnliches, das eine einzelne positive Ganzzahl als Eingabe verwendet und eine vollständige Liste der einzelnen Faktorisierungen zurückgibt oder ausgibt. Die Faktorisierungen können in beliebiger Reihenfolge erstellt werden, und ihre Begriffe können in beliebiger Reihenfolge angegeben werden, es sollten jedoch keine zwei Permutationen voneinander sein. Faktorisierungen dürfen 1
mit zwei Ausnahmen nicht enthalten sein : Für Eingaben können n
Sie die Faktorisierung n*1
anstelle von angeben n
; und zur Eingabe 1
kann 1
anstelle der leeren Liste die Faktorisierung angegeben werden.
Sie können davon ausgehen, dass die Eingabe im Bereich einer vorzeichenbehafteten 32-Bit-Ganzzahl liegt. Wenn es sich bei der Ausgabe um eine Zeichenfolge handelt, sollte klar zwischen der Abgrenzung von Zahlen innerhalb einer Faktorisierung und der Abgrenzung der Faktorisierungen unterschieden werden, es ist jedoch nicht erforderlich (zum Beispiel), dass die Faktoren mit einem verknüpft werden *
.
Ihr Code sollte in der Lage sein, alle gültigen Eingaben innerhalb von 10 Minuten auf einem vernünftigen Desktop-Computer zu verarbeiten.
Beispiele
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
quelle
901800900
und1338557220
irgendwo veröffentlichen, wo wir sie überprüfen können? Mein Code gibt mir 2048 bzw. 1024 Faktorisierungen für diese Zahlen, und ich bin mir nicht sicher, warum.Antworten:
Haskell, 56 Bytes
(2!)(1338557220::Int)
druckt in fünf Minuten auf meinem Laptop, wenn er mit kompiliert wirdghc -O3
.Haskell, 62 Bytes, aber viel schneller
(2!)(1338557220::Int)
druckt in einer viertel Sekunde auf meinem Laptop, wenn er mit kompiliert wirdghc -O3
.quelle
ghc
gibt mirParse error: naked expression at top level
undghci
gibt mirparse error on input `='
(2!)
durch das Programmmain = print ((2!) (1338557220::Int))
, kompilieren Sie mitghc -O3 factor.hs
und führen Sie mit aus./factor
.Pyth, 29 Bytes
Probieren Sie es online aus
Läuft in zwanzig Sekunden
1338557220
auf meinem Laptop.quelle
pyth factor.pyth
(oderpyth -c 'Msam+Ldgd/Hdf!%HT>S@H2tG]]Hg2'
), Bereitstellung16
auf stdin. Stellen Sie sicher, dass Sie eine aktuelle Version von Pyth verwenden. implizitQ
wurde im März hinzugefügt. Ich kann mir allerdings nicht vorstellen, wie Sie eine Division durch Null bekommen könnten."
stattdessen verwendet'
und bash hat das!%
auf etwas anderes erweitert.Python ,
2523133123111451411371351038483 BytesDies basiert größtenteils auf Anders Kaseorgs Pyth-Antwort . Anregungen zum Golfen sind willkommen. Probieren Sie es online!
Edit: 19 Bytes dank Dennis golfen. Ein Tippfehler im Code wurde behoben und ein TIO-Link hinzugefügt.
Ungolfed:
quelle
**.5
wird den Import los.JavaScript (ES6), 83 Byte
Nur @ AndersKaseorgs Quadratwurzel-Trick entlehnt, weil er mir insgesamt Bytes erspart hat. Druckt
1
für eine Eingabe von1
, sonst druckt1
s nicht.quelle
Ruby 1.9+,
878987 BytesDiese Antwort basiert auf Anders Kaseorgs Pyth-Antwort . Dieser Code funktioniert nur für Versionen nach Ruby 1.9, da Stabby Lambdas
->
erst in 1.9 eingeführt wurden. Anregungen zum Golfen sind willkommen.Ungolfed:
quelle
g[n/d,d]
:wrong number of arguments (0 for 1)
->
wurden in Ruby 1.9 stabile Lambdas eingeführt. Ich bearbeite die Antwort, um die erforderliche Versionsnummer anzuzeigen.g[n/d,d]
.g(n/d,d)
ist abwärtskompatibler.f[n]
ist erforderlich, um Stabby Lambdas und Ruby Lambdas im Allgemeinen zu nennen.f(n)
undf n
Anrufe erforderndef
undend
. Mehr Infos hier und hierJ, 52 Bytes
Nicht so effizient wie es sein könnte, da einige Faktorisierungen möglicherweise wiederholt werden und ein letzter Durchgang nach dem Sortieren jeder Faktorisierung und anschließender Deduplizierung durchgeführt werden muss.
Probieren Sie es online! (Versuchen Sie jedoch, die Eingabewerte klein zu halten).
Auf meinem Desktop sind die Timings
Erläuterung
Diese Methode basiert auf der Generierung aller festgelegten Partitionen für die Primfaktoren der Eingabe-Ganzzahl n . Die Leistung ist am besten, wenn n frei von Quadraten ist. Andernfalls werden doppelte Faktorisierungen erstellt.
quelle