Eine Sekundärzahl ist eine positive Ganzzahl, deren Primfaktoren (ohne Multiplizität) alle kleiner oder gleich der Quadratwurzel sind. 4
ist eine sekundäre Zahl, da ihr einziger Primfaktor 2
gleich der Quadratwurzel ist. Dies 15
ist jedoch keine sekundäre Zahl, da sie 5
einen Primfaktor hat, der größer ist als ihre Quadratwurzel ( ~ 3.9
). Da alle Primzahlen sich selbst als Primfaktoren haben, ist keine Primzahl eine Sekundärzahl. Die ersten paar sekundären Zahlen lauten wie folgt:
1, 4, 8, 9, 12, 16, 18, 24, 25, 27, 30, 32, 36, 40, 45, 48, 49, 50, 54, 56
Eine tertiäre Zahl wird auf ähnliche Weise definiert, mit der Ausnahme, dass alle Primfaktoren kleiner oder gleich der Kubikwurzel sein müssen. Die ersten paar Tertiärzahlen lauten wie folgt:
1, 8, 16, 27, 32, 36, 48, 54, 64, 72, 81, 96, 108, 125, 128, 135, 144, 150, 160, 162
Im Allgemeinen ist eine n-fache Zahl eine Zahl, deren Primfaktoren alle kleiner oder gleich ihrer n-ten Wurzel sind. Somit ist eine positive ganze Zahl eine Zahl, wenn jeder ihrer Primfaktoren erfüllt . Primzahlen sind also alle positiven ganzen Zahlen (alle Primfaktoren kleiner oder gleich sich selbst), Quartenary-Zahlen haben alle Primfaktoren kleiner oder gleich ihrer vierten Wurzel und so weiter.p p n ≤ xn
Die Herausforderung
Gegeben ganze Zahlen k
und n
als Eingänge Ausgang der k
th n
ary Nummer. k
kann entweder null- oder einsindiziert sein (Ihre Wahl) und n
ist immer positiv.
Beispiele
Dies sind die ersten 20 Elemente in jeder Sequenz mit bis zu 10-stelligen Zahlen:
Primary: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
Secondary: 1, 4, 8, 9, 12, 16, 18, 24, 25, 27, 30, 32, 36, 40, 45, 48, 49, 50, 54, 56
Tertiary: 1, 8, 16, 27, 32, 36, 48, 54, 64, 72, 81, 96, 108, 125, 128, 135, 144, 150, 160, 162
Quarternary: 1, 16, 32, 64, 81, 96, 108, 128, 144, 162, 192, 216, 243, 256, 288, 324, 384, 432, 486, 512
5-ary: 1, 32, 64, 128, 243, 256, 288, 324, 384, 432, 486, 512, 576, 648, 729, 768, 864, 972, 1024, 1152
6-ary: 1, 64, 128, 256, 512, 729, 768, 864, 972, 1024, 1152, 1296, 1458, 1536, 1728, 1944, 2048, 2187, 2304, 2592
7-ary: 1, 128, 256, 512, 1024, 2048, 2187, 2304, 2592, 2916, 3072, 3456, 3888, 4096, 4374, 4608, 5184, 5832, 6144, 6561
8-ary: 1, 256, 512, 1024, 2048, 4096, 6561, 6912, 7776, 8192, 8748, 9216, 10368, 11664, 12288, 13122, 13824, 15552, 16384, 17496
9-ary: 1, 512, 1024, 2048, 4096, 8192, 16384, 19683, 20736, 23328, 24576, 26244, 27648, 31104, 32768, 34992, 36864, 39366, 41472, 46656
10-ary: 1, 1024, 2048, 4096, 8192, 16384, 32768, 59049, 62208, 65536, 69984, 73728, 78732, 82944, 93312, 98304, 104976, 110592, 118098, 124416
ÆfṪ*³<‘
da wir wissen, dass, wenn irgendein FaktorẠ
den einen auf der rechten Seite verfälscht, dies der Fall ist.Brachylog , 21 Bytes
Probieren Sie es online!
Diese Antwort ist einseitig indiziert.
Erläuterung
quelle
JavaScript (ES7),
95 bis90 ByteZiemlich schnell, aber leider begrenzt durch die maximale Anzahl von Rekursionen.
Wie es funktioniert
Anstatt eine ganze Zahl i zu faktorisieren und zu verifizieren, dass alle ihre Primfaktoren kleiner oder gleich x = floor (i 1 / n ) sind , versuchen wir, die letztere Annahme direkt zu validieren. Das ist der Zweck der inneren Funktion F () :
Wir prüfen, ob eine ganze Zahl d in [2 ... i 1 / n ] i dividiert . Wenn nicht, ist die Annahme ungültig und wir geben 1 zurück . Wenn ja, wiederholen wir den Prozess auf i = i / d rekursiv, bis er fehlschlägt oder die anfängliche Ganzzahl vollständig berücksichtigt ist ( i == 1 ). In diesem Fall dekrementieren wir k . Die äußere Funktion f () wird wiederum rekursiv aufgerufen, bis k == 0 ist .
Hinweis: Durch Gleitkommazahl Fehler wie Rundungs
125**(1/3) == 4.9999…
, der tatsächliche berechnete Wert für x ist floor ((i + 1) 1 / n ) .Demo
(Hier mit einer 97-Byte-ES6-Version für eine bessere Kompatibilität.)
Code-Snippet anzeigen
quelle
JavaScript (ES7),
9379 ByteIch konnte Arnauld's Antwort nicht verstehen, also schrieb ich meine eigene und passenderweise kam sie um zwei Bytes kürzer. Bearbeiten: 14 Bytes mit Hilfe von @ETHproductions gespeichert. Ungolfed:
quelle
++i**(1/n)
eher für eine Auswertung alsi**(1/n)
für Gleitkomma-Rundungsfehler wie125**(1/3) == 4.999...
. (So wie es geschrieben steht, ist Ihr Code davon wohl nicht betroffen.)m
zwei weitere Bytes zu entfernen .Haskell, 86 Bytes
Erläuterung:
(
%%%%
bezeichnet den Code aus der obigen Zeile)quelle
filter
mit einem lambda rechnet sich selten, ein listenverständnis ist meist kürzer:m#n=(0:1:[k|k<-[2..],last[n|n<-[2..k],all((>0).rem n)[2..n-1],k
remn<1]^n<=k])!!m
.0:
, da die Indizierung 0-basiert sein kann.m#n=[k|k<-[1..],last[n|n<-[1..k],all((>0).rem n)[2..n-1],k
remn<1]^n<=k]!!m
Pyth, 13 Bytes
Probieren Sie es online aus.
Funktioniert wirklich genauso wie die Jelly-Lösung.
quelle
Perl 6, 88 Bytes
Meine zufällige Einsicht ist, dass Sie nicht jeden Faktor betrachten müssen, sondern
n
nur den größten, den die interne Funktionf
berechnet. Leider bläst es den Stack mit größeren Eingaben.Die Robustheit kann verbessert werden, indem ein Primalitätstest mit der integrierten
is-prime
Methode für Ints hinzugefügt wird, der mehrere Zeichen kostet.quelle
Schale , 10 Bytes
Probieren Sie es online!
Erläuterung
Es hat eine Weile gedauert, bis ich herausgefunden habe, wie ich
→
die leeren Listenrückgaben verwendet habe,1
anstatt-Inf
für▲
welche Blätter1
in der Liste (andernfalls würde es 2 Byte kosten, sie erneut voran zu stellen):quelle
R 93 Bytes
Null indexiert.
Es ist eine rekursive Funktion, die nur so lange ausgeführt wird, bis die nächste Zahl in der Zeile gefunden wird. Verwendet zum
numbers
Packen, um die Primfaktoren zu finden.quelle
MATL, 21 Bytes
Diese Lösung verwendet eine basierte Indizierung und die Eingänge sind
n
undk
jeweils.Probieren Sie es online!
Erläuterung
quelle
~
den zweiten Eingang umzuwandeln :-)Brachylog v2 , 16 Bytes
Probieren Sie es online!
Wir danken Dennis's Jelly-Lösung , die mich veranlasst hat, in die richtige Richtung zu denken.
Erläuterung
Hier ist eine leicht ungolfederte Version, die einfacher zu analysieren ist:
Hilfsprädikat (Zeile 2): Eingabe ist der Exponent n , Ausgabe ist nicht eingeschränkt:
Hauptprädikat (Zeile 1): Eingabe ist eine Liste, die den Index k (1-basiert) und den Exponenten n enthält ; Die Ausgabe ist nicht eingeschränkt:
quelle
APL (NARS), 53 Zeichen, 106 Byte
Prüfung:
quelle
Python 2 , 114 Bytes
Probieren Sie es online!
1-indizierte Funktion.
quelle
Japt , 14 Bytes
Nimmt
n
als erste Eingabe undk
(1-indiziert) als zweite.Versuch es
quelle