Wenn Sie jemals im Matheunterricht etwas über Primzahlen gelernt haben, müssen Sie wahrscheinlich irgendwann feststellen, ob eine Zahl eine Primzahl ist. Sie haben es wahrscheinlich vermasselt, als Sie sie noch lernten, zum Beispiel 39 für eine Primzahl zu halten. Keine Sorge, 39 ist ein Semiprime, dh es ist das Produkt zweier Primzahlen.
In ähnlicher Weise können wir eine k- fast Primzahl als das Produkt von k Primzahlen definieren. Zum Beispiel ist 40 die 4. 4-fast-Primzahl; 40 = 5 * 2 * 2 * 2, das Produkt von 4 Faktoren.
Ihre Aufgabe ist es, ein Programm / Funktion zu schreiben , die zwei ganze Zahlen akzeptiert n und k als Eingabe und Ausgabe / Rück die n - te k -fast Primzahl. Dies ist ein Code-Golf, also gewinnt das kürzeste Programm in Bytes.
Testfälle
n, k => output
n, 1 => the nth prime number
1, 1 => 2
3, 1 => 5
1, 2 => 4
3, 2 => 9
5, 3 => 27
Sonstiges
Sie müssen die Primzahlen mit anderen Mitteln als mit einer einfachen geschlossenen Form selbst generieren, wenn eine solche geschlossene Form existiert.
f
in Bezug auf dief[n,1]
richtige ist, da die Listen von fast-Primzahlen enthalten ungerade Zahlen (zB die letzten beiden Beispiele, die als Produkt aus einer Zweierpotenz nicht ausdrückbar sind und bester). (Und es sagt auch dasf[n,1] == 2*f[n,1]
.)Antworten:
Pyth, 9 Bytes
Erläuterung
Probieren Sie es hier aus!
Oder probieren Sie eine Testsuite!
quelle
Brachylog , 9 Bytes
@Sundar schlagen, indem halb so viele Bytes verwendet werden
Erläuterung
Probieren Sie es online!
quelle
Pyke (Festschreiben 29), 8 Bytes (nicht konkurrenzfähig)
Erläuterung:
quelle
Julia,
84785957 BytesDies ist eine rekursive Funktion, die zwei Ganzzahlen akzeptiert und eine Ganzzahl zurückgibt. Der Ansatz besteht hier darin, die Summe der Exponenten in der Primfaktorisierung gegen zu prüfen
k
.Ungolfed:
quelle
Gelee, 9 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Brachylog , 18 Bytes
Probieren Sie es online!
quelle
Mathematica,
5651 BytesWarnung: Dies ist theoretisch. Laufen Sie nicht für Werte> 4. Ersetzen Sie 2 ^ ## durch einen effizienteren Ausdruck.
quelle
n=1
.PrimeOmega[1]
auswertet0
,&&#>1
ist überflüssig.Mathematica,
5349 BytesErzeugt eine Liste von Ganzzahlen basierend auf einer losen Obergrenze.
PrimeOmega
zählt die Primfaktoren mit Multiplizitäten, die k- fast PrimzahlCases
wird aus der Liste genommen und das n- te Mitglied dieser Teilmenge wird zurückgegeben.quelle
2^Sequence[1,2]
, warum letzteres fehlschlägt.Haskell, 88 Bytes
Kann wahrscheinlich noch viel mehr golfen werden, da ich noch ein Neuling bei Haskell bin. Die Funktion
q
gibt die Anzahl der Faktoren ihres Arguments zurück undf
verwendet diese, um dasnth
Element einer Liste zu erhalten, die aus allen Zahlen mitk
Faktoren besteht.quelle
MATL, 14 Bytes
Probieren Sie es auf MATL Online aus
quelle
Python 3, 100 Bytes
Dies ist eine sehr einfache Brute-Force-Funktion. Es prüft jede Zahl ab 2 mit
sympy
derfactorint
Funktion 's , bis esn
k
fast Primzahlen gefunden hat. An diesem Punkt gibt die Funktion dien
th dieser zurück.Ungolfed:
Ich benutze,
sum(factorint(a).values())
weilfactorint
ein Wörterbuch vonfactor: exponent
Paaren zurückgibt . Wenn ich die Werte des Wörterbuchs (die Exponenten) nehme und summiere, erfahre ich, wie viele Primfaktoren es gibt und wask
diesek
fast Primzahl ist.quelle
Python 2 , 76 Bytes
Probieren Sie es online!
quelle