Eine Möglichkeit, eine natürliche Zahl darzustellen, besteht darin, Exponenten von Primzahlen zu multiplizieren. Zum Beispiel kann 6 durch 2 ^ 1 * 3 ^ 1 dargestellt werden und 50 kann durch 2 ^ 1 * 5 ^ 2 dargestellt werden (wobei ^ die Exponierung anzeigt). Die Anzahl der Primzahlen in dieser Darstellung kann dazu beitragen, festzustellen, ob die Verwendung dieser Darstellungsmethode im Vergleich zu anderen Methoden kürzer ist. Da ich diese aber nicht von Hand berechnen möchte, brauche ich ein Programm, das das für mich erledigt. Da ich mir das Programm jedoch merken muss, bis ich nach Hause komme, muss es so kurz wie möglich sein.
Deine Aufgabe:
Schreiben Sie ein Programm oder eine Funktion, um zu bestimmen, wie viele verschiedene Primzahlen in dieser Darstellung einer Zahl enthalten sind.
Eingang:
Eine ganze Zahl n mit 1 <n <10 ^ 12, die mit einer normalen Methode ermittelt wird.
Ausgabe:
Die Anzahl der unterschiedlichen Primzahlen, die für die Darstellung der Eingabe erforderlich sind, wie in der Einführung erläutert.
Testfälle:
24 -> 2 (2^3*3^1)
126 -> 3 (2^1*3^2*7^1)
1538493 -> 4 (3^1*11^1*23^1*2027^1)
123456 -> 3 (2^6*3^1*643^1)
Dies ist OEIS A001221 .
Wertung:
Dies ist Code-Golf , die niedrigste Punktzahl in Bytes gewinnt!
Antworten:
MATL ,
43 Bytes-1 Byte dank Luis Mendo
Probieren Sie es online!
Ursprüngliche Antwort:
Probieren Sie es online!
Eine sehr gute
Yfun
Antwort.quelle
05AB1E , 2 Bytes
eine weitere ziemlich langweilige Antwort ...
Ein vollständiges Programm, das eine numerische Eingabe akzeptiert und das Ergebnis druckt
Probieren Sie es online!
Wie?
quelle
Mathematica, 7 Bytes
Ja, da ist ein eingebautes.
Mathematica, 21 Bytes
Der weite Weg.
quelle
Length@FactorInteger
dasselbe?Length@*FactorInteger
produziert eine reine Funktion: die Zusammensetzung vonLength
undFactorInteger
. Ich kann definierenfun=Length@*FactorInteger
und dann anrufenfun[1001]
. Auf der anderen SeiteLength@FactorInteger
würde bedeutenLength[FactorInteger]
und bewerten0
.Gaia , 2 Bytes
Noch eine ziemlich langweilige Antwort ... --- J. Allan
Probieren Sie es online!
ḋ
- Primfaktorisierung als [Prim, Exponent] -Paare.l
- Länge.quelle
Python 2, 56 Bytes
quelle
Retina ,
3130 BytesDie Eingabe ist unär.
Vielen Dank an @MartinEnder für das Golfen von 1 Byte!
Probieren Sie es online! (einschließlich Dezimal-Unär-Umrechner)
Wie es funktioniert
Da das Programm aus einem einzelnen regulären Ausdruck mit dem
&
Modifikator besteht, zählt Retina einfach die Anzahl überlappender Übereinstimmungen. Es wird angenommen, dass die Eingabe aus n Wiederholungen von 1 besteht und nichts anderem besteht.Der negative Ausblick
an Stellen Einstimmungen zwischen 1 s, die nicht von zwei oder mehr gefolgt 1 s '(
11+
), gefolgt durch eine oder mehr Wiederholungen der gleichen Menge an 1 ‚s (\1+
), durch das Ende der Eingabe folgt ($
).Jede zusammengesetzte Zahl ab mit a, b> 1 kann geschrieben werden als b Wiederholungen eine Wiederholung von 1 , so dass die Look - Ahead - Standorten entspricht nur gefolgt von p Wiederholungen von 1 , wobei p = 1 oder p ist eine Primzahl.
Der Regex
stellt sicher , p> 1 durch mindestens zwei bedürftigen 1 ‚s (
11+
) und speichert der Schwanz von 1 ‘ in der zweiten Einfanggruppe s (\2
).Endlich der positive Lookbehind
überprüft, ob die gesamte Eingabe aus kp Vorkommen ( k ≥ 1 ) von 1 besteht , und überprüft, ob p die Eingabe teilt.
Somit entspricht jede Übereinstimmung einem eindeutigen Primteiler p .
quelle
Bash + GNU-Dienstprogramme, 33
Probieren Sie es online aus .
Erläuterung
quelle
grep -Po ' \d+'
Speichert ein Byte übertr \ \\n|sed 1d
.grep -Po '( \d+)\1*'
bei Eingabe 46 .Gelee , 3 Bytes
eine ziemlich langweilige Antwort ...
Ein monadischer Link, der eine Nummer aufnimmt und eine Nummer zurückgibt
Probieren Sie es online!
Wie?
quelle
Æv
?Æ
ist Alt-Code 0198. 2. Sie können eine Tastatur einrichten (ich habe nicht). 3. Die Codepage.Ohm v2 , 2 Bytes
Probieren Sie es online!
Die beiden eingebauten Funktionen befinden sich in der Dokumentation lol direkt nebeneinander.
quelle
Gelee , 2 Bytes
Noch eine ziemlich langweilige Antwort ... --- J. Allan
Probieren Sie es online!
Ein eingebautes.
quelle
Alice , 10 Bytes
Probieren Sie es online!
Erläuterung
Dies ist nur das Standardframework für lineare arithmetisch anspruchsvolle Programme, die dezimale E / A benötigen. Das eigentliche Programm selbst ist dann nur:
Welches tut:
quelle
JavaScript 45 Bytes
* Für @SEJPM fordern Sie eine Erklärung an: Was ich hier tue, ist, dass ich von 2 - n gehe (was sich ändert und schließlich der größte Primfaktor sein wird) - jetzt, wenn die aktuelle Zahlenteilung ni es nur einmal zählen möchte (gerade) obwohl es ein Faktor von 2 * 2 * 2 * 3 sein kann - 2 wird einmal gezählt) - so kommt das "j" zum Bild, wenn j im Aufruf der Funktion nicht angegeben ist - j erhält den Wert von " undefined ", und wenn n% i == 0, dann rufe ich die Funktion mit j = 1 beim nächsten Aufruf auf) - und dann addiere ich nur 1, wenn j gleich undefined ist, was! j + Funktion ist (n / i, i, ( j = 1 oder nur 1)). ich ändere i in dieser Angelegenheit nicht, weil es noch durch i wieder teilbar sein kann (2 * 2 * 3), aber dann wird j gleich 1 und es wird nicht als ein Faktor gezählt. Ich hoffe, ich habe es gut genug erklärt.
Wenn die letzte Primzahl sehr groß ist, hat sie einen maximalen Aufrufstapel. Wenn dies ein Problem ist, kann ich eine iterative ausführen
quelle
CJam ,
75 BytesDanke an Martin Ender für 2 Bytes!
Anonymer Block (Funktion), der die Eingangsnummer auf dem Stapel erwartet und durch die Ausgangsnummer ersetzt.
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
quelle
Brachylog , 3 Bytes
Probieren Sie es online!
Erläuterung
quelle
Pyth, 3 bytes
Test suite
Length (
l
) of set ({
) of prime factors (P
) of the input.quelle
Husk, 3 bytes
Try it online!
Explanation
quelle
Actually, 2 bytes
Yet another pretty boring answer... --- J. Allan
Try it online!
The first character can be replaced by
w
.quelle
Pyke, 3 bytes
Try it here!
quelle
Python 3,
6867 bytes1 byte removed thanks to @Mr.Xcoder
This times out for the largest test cases. Try it online!
quelle
R + numbers,
3014 bytes16 bytes removed thanks to @Giuseppe
Also, here is the Try it online!! link per @Giuseppe.
quelle
f=function(x)
and the(x)
asnumbers::omega
is a function already. However, asnumbers
is not standard for R, you should make your answer "R + numbers". Also, you should include a TIO link. Still, +1, very nice.MATL
solution is very nice (+1 yesterday).numbers::
. Otherwise, to me it's the same as using animport
in any other language.Convex, 3 bytes
Try it online!
quelle
Pari/GP, 5 bytes
I don't know why it is called nu in Mathematica but omega in Pari/GP.
Try it online!
quelle
Haskell, 58 bytes
-4 bytes thanks to @Laikoni
Try it online!
Explanation
Essentially generates all primes at most as large as
n
and filters them for being a factor of n and then takes the length of the result.quelle
sum[1|x<- ... ]
instead oflength
.Japt,
54 bytesTry it
Get the divisors (
â
) and count (è
) the primes (j
).quelle
ARBLE, 28 bytes
Try it online!
This is a very literal solution
quelle
Dyalog APL, 17 bytes
Try it online!
quelle
Python 2,
6355 bytesA much more interesting answer...
-8 bytes thanks to Jonathan Frech (use an argument with a default for the post-adjustment of the result of primes from
0
to1
-- much better than a wrapping lambda!!)A recursive function taking a positive integer,
n
, and returning a positive integer, the count.Try it online! Really inefficient, don't even bother with the other test cases.
quelle
J, 12 bytes
q:
is J's prime exponents function, giving it the argument__
produces a matrix whose first row is all nonzero prime factors and whose 2nd row is their exponents.We take the shape
$
of that matrix -- rows by columns -- the number of columns is the answer we seek.{:
gives us the last item of this two items (num rows, num columns) list, and hence the answer.Try it online!
quelle
Java (OpenJDK 9), 67 bytes
Try it online!
quelle
Javascript ES6, 56 chars
Test:
quelle