Verwandte: Iterierte Phi (n) -Funktion .
Ihre Herausforderung besteht darin, die iterierte Phi-Funktion zu berechnen:
f(n) = number of iterations of φ for n to reach 1.
Wo φ
ist Eulersche Phi-Funktion .
Verwandte OEIS .
Hier ist das Diagramm davon:
Regeln:
Ihr Ziel ist die Ausgabe f(n)
von n=2
bis n=100
.
Das ist Code-Golf, also gewinnt der kürzeste Code.
Hier sind die Werte, mit denen Sie vergleichen können:
1, 2, 2, 3, 2, 3, 3, 3, 3, 4, 3, 4, 3, 4, 4, 5, 3, 4, 4, 4, 4, 5, 4, 5, 4, 4, 4, 5, 4, 5, 5, 5, 5, 5, 4, 5, 4, 5, 5, 6, 4, 5, 5, 5, 5, 6, 5, 5, 5, 6, 5, 6, 4, 6, 5, 5, 5, 6, 5, 6, 5, 5, 6, 6, 5, 6, 6, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 6, 5, 6, 7, 5, 7, 5, 6, 6, 7, 5, 6, 6, 6, 6, 6, 6, 7, 5, 6, 6
code-golf
math
sequence
kolmogorov-complexity
number-theory
Einfach schöne Kunst
quelle
quelle
x
, bei denenphi(x)
es sich um eine bestimmte feste Zahl handelt.f(n)
, als sie mit einer Reihe fester Nummern auszuführen. Dies macht auch einen Unterschied zwischen Sprachen mit der Fähigkeit, Funktionen auf Bereiche mit weniger Bytes anzuwenden (teilweise Chamäleon-Herausforderung?)Antworten:
Haskell ,
5352 BytesDanke nimi für das Speichern von 1 Byte!
Probieren Sie es online!
sum[1|1<-gcd n<$>[1..n]]
gibtφ(n)
(aus flawr genommen , danke!)f
ist eine rekursive Funktion, die berechnet,1+φ(n)
wenn n nicht ist1
, und0
wennn
ist ausgibt1
, da es keine weiteren Iterationen getroffen werden , um zu erreichen sind1
Schließlich
f<$>[2..100]
erzeugt eine Liste vonf
Applied auf jedes Element von[2..100]
quelle
Haskell ,
70-6968 BytesDie Funktion
(\n->sum[1|1<-gcd n<$>[1..n]])
ist die Totientenfunktion, die wir in der anonymen Funktion immer wieder anwenden. Danke @laikoni für -1 Byte!EDIT: Ich habe gerade herausgefunden, dass @xnor diese exakte Totientenfunktion in einer früheren Herausforderung verwendet hat .
Probieren Sie es online!
quelle
MATL ,
1615 BytesProbieren Sie es online!
Erläuterung
Alte Version, 16 Bytes
Probieren Sie es online!
Erläuterung
quelle
2 3 3 4 3
, sind , wenn die Herausforderung besagt, dass sie lauten sollten1 2 2 3 2
Jelly ,
1211109 BytesProbieren Sie es online!
-1 Byte dank HyperNeutrino!
-1 Byte Danke an Mr. Xcoder!
-1 Byte dank Dennis
Wie es funktioniert
Da dies von Dennis gemacht wurde, habe ich (verständlicherweise) keine Ahnung, warum dies funktioniert, nur dass es funktioniert.
quelle
f(n)
von2
bis aus100
, und die Frage erwähnt keine Eingabe, daher denke ich, dass dies die richtige Version istf
fürn=2
zun=100
, nicht nur einen Wert.#
in diesem Fall zu verwenden? So etwas wie diese (was eindeutig nicht aber von jemandem geschrieben funktioniert , die die Syntax klar verstehen!)€
ist es normalerweise besser , sie auf jedes Element anzuwenden als#
.APL (Dyalog) ,
502925 BytesSchau ma, kein eingebauter Totient!
4 Bytes gespart dank @ H.PWiz
Probieren Sie es online!
Wie?
Anscheinend habe ich mich zuerst für die längere (und schwierigere) Summenformel entschieden. Siehe Revisionsverlauf.
⍳⍵
-1
bisn
⍵∨
- GCD mitn
1=
- gleich 1?+/
- Alles zusammenDies ist der Totient. Der Rest ist Wrapper für das Zählen (
1+∇
) und Anwenden auf den Bereich2..100
(¨1+⍳99
).quelle
Mathematica, 44 Bytes
-10 Bytes von @Misha Lavrov
-2 Bytes von @ user202729
Probieren Sie es online!
quelle
J REPL, 23 Bytes
Ich habe nicht überprüft, aber dies funktioniert wahrscheinlich in regulärem J, wenn Sie es als Nomen definieren (ich habe dies auf meinem Telefon auf dem REPL gespielt).
Eingebaute, yo.
Ich würde sagen, dass es mindestens 2-3 Bytes gibt, die abgeschnitten werden müssen (off-by-one aufgrund der Funktionsweise
a:
, der Verwendung|
als Noop usw.).quelle
+/*<:5&p:^:a:2+i.99
für 19 Bytes Probieren Sie es online!"+
statt"0
, so dass es gleich werden könnte<:#@(5&p:^:a:)"+i.99
+/1<a:5&p:2+i.99
a:
in deinem Code erklären ? Wie funktioniert es statt^:
?(5&p:)^:a: m
kann wiea: 5&p: m
die andere Definition verwendet werden,&
wenn eine Dyade mit einem Substantiv verbunden und dann dyadisch aufgerufen wird.JavaScript (ES6),
115...10499 BytesHardcodierung mag kürzer sein, aber versuchen wir es mit einem rein mathematischen Ansatz.
quelle
Python 2 , 80 Bytes
Probieren Sie es online!
quelle
Python 2 , 82 Bytes
Probieren Sie es online!
Dabei werden die folgenden Beobachtungen verwendet:
f(a*b) = f(a) + f(b) - 1
, außer das-1
weggelassen wird wenna
undb
beide gerade sindf(p) = f(p-1) + 1
wannp
ist prime, mitf(2)=1
Dies impliziert, dass, wenn
n
Primfaktorisierung vorliegtn = 2**a * 3**b * 5**c * 7**d * 11**e * ...
,f(n) = max(a,1) + b + 2*c + 2*d + 3*e + ...
jederp>2
Faktor zur Faktorisierung beiträgtf(p-1)
.Ich bin nicht sicher, ob diese weiterhin Bestand haben
n=100
, aber wenn dies der Fall ist, können sie definiert und berechnet werden,f
ohne sie zu verwendenφ
.quelle
Bubblegum , 49 Bytes
Probieren Sie es online!
quelle
PowerShell , 110 Byte
Probieren Sie es online!
Mathematischer Ansatz.
Eigentlich durchschaut, sehr ähnlich der C-Antwort , aber unabhängig entwickelt. Erstellt ein Array von
0
s, durchläuft Schleifen von2
bis100
und berechnet dannphi
anhand dergcd
Formulierung. Der Teil in parens am Ende speichert das Ergebnis$a
für den nächsten Durchlauf und platziert eine Kopie in der Pipeline, was zur impliziten Ausgabe führt.PowerShell, 112 Byte
Probieren Sie es online!
Fest codiert. Ho-hum.
Kürzere als ich einen mathematischen Ansatz von etwa 10-15 Bytes bekommen könnte.quelle
Python 2 , 83 Bytes
Probieren Sie es online!
Kombiniert eine heuristische Schätzung mit einer fest codierten Konstante, die jede Schätzung als entweder
-0
oder korrigiert-1
.quelle
Schale ,
1017 BytesProbieren Sie es online!
Bearbeiten : +7 Byte für die tatsächliche Zuordnung der Funktion über den angeforderten Bereich, bevor nur die Funktion A003434 berechnet wurde .
Erläuterung
Folgendes berechnet A003434 :
Das
m(....)ḣ100
Teil ordnet diese Funktion nur über den Bereich [2..100] zu, wobei ich nicht sicher bin, wie ich diesen Teil zuvor übersehen habe: Squelle
PHP, 98 Bytes
Probieren Sie es online!
Ich habe alle Ziffern in eine Binärzeichenfolge gepackt. Nachdem ich es ausgepackt, in ein Array konvertiert und dann das Array erneut zusammengefügt hatte, musste ich nur die 1,2 voranstellen und die 6 anhängen, da diese nicht passen würden oder einen Steuercode erscheinen ließen.
quelle
Perl 6 , 47 Bytes
Probieren Sie es online!
quelle
05AB1E , 11 Bytes
Probieren Sie es online!
Erläuterung
quelle
C 112 Bytes
Ungolfed:
Probieren Sie es online!
quelle
Alumin , 87 Bytes
Probieren Sie es online!
Erläuterung
quelle
Pyth, 38 Bytes (nicht konkurrenzfähig)
Probieren Sie es auf dem Pyth Herokuapp aus , da es auf TIO aus irgendeinem Grund nicht funktioniert.
Ich habe keinen Zweifel, dass die explizite Pyth-Lösung kleiner ist, aber ich wollte sehen, wie klein ich den Code durch Komprimieren der Sequenz bekommen und Pyth lernen kann, denke ich. Dies nutzt die Tatsache, dass eine Obergrenze der Sequenz ist
log2(n)+1
.Erläuterung
Ich habe die komprimierte Zeichenfolge über
Ci_.e+1-sl+1ksb"122323333434344534444545444545555545455645555655565646555656556656665656565656656757566756666667566"3
, die mit ein paar Typkonvertierungen genau das Gegenteil des obigen Codes ist.quelle
Ohm v2 , 41 Bytes
Probieren Sie es online!
Buchstäblich vollständig hartcodiert ... Ich habe die obige Sequenz tatsächlich genommen, alles, was keine Zahl war, entfernt, als Basis 8 interpretiert und dann in Ohms integrierte Basis 255-Zahlendarstellung umgewandelt. Das machen die Zitate. Dann verwandelt das Programm das einfach wieder in Basis 8.
quelle