In dieser Aufgabe müssen Sie ein Programm schreiben, das die Primfaktoren einer Zahl berechnet. Die Eingabe ist eine natürliche Zahl 1 <n <2 ^ 32. Die Ausgabe ist eine Liste der Primfaktoren der Zahl im folgenden Format. Exponenten müssen weggelassen werden, wenn sie 1 sind. Nur Primzahlen ausgeben. (Angenommen, die Eingabe ist 131784):
131784 = 2 ^ 3 * 3 * 17 ^ 2 * 19
Die Verwendung des gleichen Leerzeichens ist nicht erforderlich. Wo immer dies angebracht ist, kann ein Leerzeichen eingefügt werden. Ihr Programm sollte für jede Eingabe in weniger als 10 Minuten abgeschlossen sein. Das Programm mit der kürzesten Anzahl von Zeichen gewinnt.
code-golf
number-theory
primes
factoring
FUZxxl
quelle
quelle
Antworten:
SageMath, 31 Bytes
Testfall:
83891573479027823458394579234582347590825792034579235923475902312344444
Ausgänge:83891573479027823458394579234582347590825792034579235923475902312344444 = 2^2 * 3^2 * 89395597 * 98966790508447596609239 * 263396636003096040031295425789508274613
quelle
Ruby 1.9,
7470 ZeichenBearbeitungen:
exponent > 1
quelle
Perl 5.10, 73
88Übernimmt die eingegebene Nummer aus der Standardeingabe. Berechnet die Faktoren für mehrere Eingaben, falls angegeben.
Gerechnet als Differenz zu
perl -e
. Für das\K
Regex-Metazeichen wird 5.10 benötigt .quelle
factor
.p
Option nicht mitzählen ?split/\D/,~factor $_~;$_="@_";
können Sie schreiben$_=~factor $_~;s/\D/ /g;
? (Natürlich~
mit dem Backtick ersetzen .)$_=`factor $_`;s/\D/ /g;
? Duales Backtick-Encasing hilft.OCaml, 201 Zeichen
Eine direkte zwingende Übersetzung des besten Python-Codes:
Beispielsweise,
(Beachten Sie, dass ich auf die Ausgabe der Endzeile verzichtet habe.) Nur zum Spaß, mit 213 Zeichen eine
reinfunktionale Version, die durch den freien Gebrauch von Operatoren gründlich verschleiert wurde:quelle
Python,
140135133 Zeichenquelle
' * %d'
... Und zwei weitere Dinge65536 == 4**8
:; Zeile 7:if e:s+='*%d'%f+'^%d'%e*(e>1)
J, 72
Typisch J. Zwei Charaktere für den Großteil der Arbeit, sechzig Charaktere für die Präsentation.
Bearbeiten: Die Anzahl der Zeichen wurde korrigiert.
quelle
161784
Sie etwas eingegeben haben, sind es immer noch 72 Zeichen.|: __ q: y
?J,
5352 ZeichenDiese Lösung basiert auf
rplc
der Zufallslösung, hat aber auch einige originelle Ideen.In nicht stillschweigender Notation wird diese Funktion
wo
g
ist definiert alsq: y
ist der Vektor der Primfaktoren vony
. Zum Beispielq: 60
Erträge2 2 3 5
.x u/. y
giltu
füry
keyed byx
, dhu
wird auf Vektoren von Elementen angewendet,y
für die die Einträge inx
gleich sind. Dies ist ein wenig kompliziert zu erklären, aber in dem speziellen Fall ,y u/. y
oderu/.~ y
,u
auf jeden Vektor von verschiedenen Elementen in angewandty
, wobei jedes Element für so oft wiederholt wird , wie es erscheint iny
. Zum Beispiel</.~ 1 2 1 2 3 1 2 2 3
Erträge# y
ist die tally dery
, dass die Anzahl der Elemente in isty
.": y
Formatey
als Zeichenfolge.x , y
hängt anx
undy
.{. y
ist der Kopfy
, das heißt sein erster Gegenstand.(": {. y), '^' , (": # y) , '*'
formatiert einen Vektor von n Wiederholungen einer Zahl k in einen String der Form k ^ n *. Dieser Satz in stillschweigender Notation ist:@{.,'^','*',~":@#
, den wir an das/.
weiter oben beschriebene Adverb weitergeben.x rplc y
ist die Bibliotheksfunktion zum Ersetzen von Zeichen.y
hat die Forma ; b
und jede Instanz von stringa
inx
wird ersetzt durchb
.x
wird verwüstet (dh so umgeformt, dass es Rang 1 hat), bevor die Operation stattfindet, die hier verwendet wird. Dieser Code ersetzt^1*
mit*
als mit dem Auftrag , Ausgabeformat entsprechen.}: y
ist die Abkürzung vony
allem, außer seinem letzten Gegenstand. Dies wird verwendet, um das Trailing zu entfernen*
.quelle
__ q:
?Probieren Sie es online!PHP, 112
118
quelle
Python 119 Zeichen
quelle
JavaScript,
124122119quelle
Perl, 78
Es verwendet die s /// r-Funktion von Perl 5.14, um die ^ 1s zu beseitigen. 81 Zeichen, die in einer Schleife ausgeführt werden sollen:
quelle
PHP, 236 Zeichen
Ausgabe für 131784: 2 ^ 3 * 3 * 17 ^ 2 * 19
Vervollständigt beim Testen alle Zahlen innerhalb weniger Sekunden.
Die Eingabe wurde nie angegeben, weshalb ich sie mit Befehlszeilenargumenten aufrief.
quelle
Scala 374:
ungolfed:
quelle
J 74 Zeichen
64 Zeichen mit Eingabe in Variable
x
:quelle
3 : 0
Definition verwenden.3 : 0
Version nur den ungekapselten String einfügen kann, aber es hat nicht funktioniert. Ich könnte es aber später stillschweigend versuchen. Dies ist das 3: 0, das ich versucht habe: pastebin.com/rmTVAk4j .y
wie Sie es sollten?''
statta:
an einem Ort. Vielleicht ist das der Unterschied?Java 10,
109108 Bytes (Lambda-Funktion) (nicht konkurrierend auf Anfrage von OP)Probieren Sie es online aus.
Java 6+, 181 Bytes (volles Programm)
Probieren Sie es online aus.
-1 Byte dank @ceilingcat .
Erläuterung:
quelle
Japt ,
282726 Bytes-1 Byte dank Shaggy
Versuch es
quelle
Powershell,
11397 BytesInspiriert von Joeys Antwort . Es ist langsam, aber kurz.
Erklärtes Testskript:
Ausgabe:
quelle
Jelly , 16 Bytes (nicht konkurrierend auf Anfrage von OP)
Eine meiner ersten Gelee-Antworten, kann also definitiv (besonders
³”=³
) golfen werden ..Probieren Sie es online aus.
Erläuterung:
quelle
(non-competing)
. :)05AB1E ,
2220 Bytes (nicht konkurrierend auf Anfrage von OP)-2 Bytes dank @Emigna .
Probieren Sie es online aus.
Erläuterung:
quelle
1K
statt funktionieren soll `≠ iy in der Schleife.APL (NARS), 66 Zeichen, 132 Byte
Test und Kommentar:
Wenn jemand viel Zeit mit diesen Primitiven hat, kenne sie sehr gut. Für mich ist es möglich, dass der Code klarer von Kommentaren ist. Also ist der Code klarer als Kommentare, Kommentare unbrauchbar.
quelle
JavaScript, 107
120
quelle
*
in der Ausgabe und gibt den Exponenten aus, auch wenn es 1 ist.*
davon ausgegangen, dass er mit multipliziert wird1
. Wenn es ein so großes Problem ist, werde ich es beheben.1
nicht gedruckt werden sollte. Und nein, ein Trailing*
ist auch dagegen. Wenn man das Ausgabeformat so frei wählen könnte, dannfactor(1)
wäre es am einfachsten , wenn man es herausschält . Antworten können nur sinnvoll verglichen werden, wenn sie alle das gleiche Problem lösen.PHP , 112 Bytes
Probieren Sie es online!
quelle
PHP, 93 Bytes
Ich könnte 89 Bytes mit PHP 5.5 (oder neuer) machen, aber das verzögert die Herausforderung um mehr als 2 Jahre:
Laufen Sie als Pipe mit
-nF
oder probieren Sie sie online aus .quelle