Wir hatten vor einiger Zeit eine primäre Faktorisierungsherausforderung , aber diese Herausforderung ist fast sechs Jahre alt und entspricht kaum unseren aktuellen Anforderungen. Ich glaube, es ist Zeit für eine neue.
Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die eine ganze Zahl größer als 1 als Eingabe verwendet und eine Liste ihrer Primfaktoren ausgibt oder zurückgibt.
Regeln
- Die Ein- und Ausgabe kann nach einer beliebigen Standardmethode und in einem beliebigen Standardformat erfolgen.
- Doppelte Faktoren müssen in der Ausgabe enthalten sein.
- Die Ausgabe kann in beliebiger Reihenfolge erfolgen.
- Die Eingabe wird nicht kleiner als 2 oder größer als 2 31 - 1 sein.
- Built-Ins sind erlaubt, aber auch eine nicht eingebaute Lösung wird empfohlen.
Testfälle
2 -> 2
3 -> 3
4 -> 2, 2
6 -> 2, 3
8 -> 2, 2, 2
12 -> 2, 2, 3
255 -> 3, 5, 17
256 -> 2, 2, 2, 2, 2, 2, 2, 2
1001 -> 7, 11, 13
223092870 -> 2, 3, 5, 7, 11, 13, 17, 19, 23
2147483646 -> 2, 3, 3, 7, 11, 31, 151, 331
2147483647 -> 2147483647
Wertung
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
Antworten:
Pyth , 1 Byte
Ich mag Pyths Chancen bei dieser Herausforderung.
quelle
Python 2 , 55 Bytes
Probieren Sie es online!
quelle
Python 2, 53 Bytes
Versucht jeden möglichen Teiler
i
. Wenni
es sich um einen Divisor handelt, wird dieser vorangestellt und mit neu gestartetn/i
. Andernfalls wird der nächsthöhere Divisor ausprobiert. Da die Teiler in aufsteigender Reihenfolge geprüft werden, werden nur die Primzahlen gefunden.Als Programm für 55 Bytes:
quelle
Mathematica,
3830 BytesDanke @MartinEnder für 8 Bytes!
quelle
FactorInteger[#][[All, 1]]&
? 26 BytesGelee , 2 Bytes
Probieren Sie es online!
quelle
Haskell , 48 Bytes
Probieren Sie es online! Anwendungsbeispiel:
(2%) 1001
Erträge[7,11,13]
.quelle
JavaScript (ES6), 44 Byte
Schrecklich ineffizient, da es von 2 bis zu jedem Primfaktor, einschließlich des letzten, iteriert. Sie können die Zeitkomplexität auf Kosten von 5 Byte drastisch reduzieren:
quelle
Cubix ,
3732 BytesProbieren Sie es online! oder Beobachten Sie es in Aktion .
quelle
Eigentlich 6 Bytes
Probieren Sie es online!
Erläuterung:
quelle
o
jetzt verwenden, oder?J, 2 Bytes
Body muss mindestens 30 Zeichen lang sein.quelle
MATL , 2 Bytes
Probieren Sie es online!
Obligatorische "langweilige Antwort".
quelle
Japt, 2 Bytes
Ein
k
für den Eingang verwendetes eingebautes GerätU
. Bezieht sich auch auf ein Land.Online testen!
quelle
taub , 3 Bytes
Diese Sprache ist noch recht jung und noch nicht wirklich bereit für irgendetwas Wesentliches, kann aber Primfaktorisierung leisten:
Dies wartet auf Benutzereingaben und gibt dann die Liste der Primfaktoren aus.
quelle
MATLAB, 6 Bytes
Ich denke, das bedarf keiner Erklärung.
quelle
Bash + Coreutils, 19 Bytes
Probieren Sie es online!
quelle
factor|sed s/.*://
. Außerdemfactor|cut -d: -f2
(oderfactor|cut -d\ -f2
entsprechend Ihrer aktuellen Ausgabe) hat es die gleiche Bytelänge, wird jedoch schneller ausgeführt und benötigt weniger Speicherplatz.factor|cut -d\ -f2-
den führenden Bereich entfernen, der ein Byte länger ist.Batch, 96 Bytes
quelle
Pyke, 1 Byte
Probieren Sie es hier aus!
Primfaktoren eingebaut.
quelle
Hexagonie , 58 Bytes
Noch nicht golfen, aber @MartinEnder sollte das sowieso zerstören können
Gibt die Faktoren mit einem Leerzeichen am Ende durch Leerzeichen getrennt aus
Golf gespielt:
Ausgelegt:
Erklärung kommt später.
quelle
05AB1E , 1 Byte
Probieren Sie es online!
quelle
CJam, 2 Bytes
cjam.aditsu.net / ...
Dies ist eine Funktion. Martin, ich war anscheinend müde.
quelle
C 92 Bytes
Ungolfed-Version:
quelle
Japt , 1 Byte (nicht konkurrierend)
Probieren Sie es online!
quelle
PHP , 51 Bytes
Probieren Sie es online!
quelle
C (gcc) , 51 Bytes
Probieren Sie es online!
quelle
Perl 6 ,
7764 BytesVersuch es
Versuch es (Hinweis: Es ist nicht genügend Zeit für die Fertigstellung vorgesehen.)
Eine viel performantere Version ist mit 100 Bytes etwas länger.
Versuch es
Erweitert: (64-Byte-Version)
quelle
VB.NET, 86 Bytes
Hatte dies aus einigen Project-Euler-Programmen rumgesessen. Die Optimierungen wurden aus Gründen der Kürze entfernt, und dies ist das Ergebnis. Natürlich ist VB sehr ausführlich, es ist also ziemlich lang. Ich zähle nicht das führende Leerzeichen. Es kann weggelassen werden, ist aber einfacher damit zu lesen.
Dies nimmt eine ganze Zahl als Parameter und gibt die Primfaktoren mit einem Komma danach aus. Am Ende steht ein Nachkomma.
quelle
Perl 6 , 51 Bytes
Eine rekursive Lösung:
quelle
Java (OpenJDK) , 259 Byte
Probieren Sie es online!
quelle
Ruby, 61 Bytes
Kürzeste eingebaute Version, die mir in den Sinn kam.
quelle
Ruby , 48 Bytes
Probieren Sie es online!
Ein bisschen zu spät zur Party, aber ... warum nicht?
quelle