Inspiriert von dieser Frage bei Mathematics .
Das Problem
Sei
n
eine natürliche Zahl≥ 2
. Nehmen Sie den größten Teiler vonn
- der sich vonn
selbst unterscheidet - und subtrahieren Sie ihn vonn
. Wiederholen, bis Sie bekommen1
.
Die Frage
Wie viele Schritte tut , es zu erreichen nehmen 1
für eine bestimmte Anzahl n ≥ 2
.
Ausführliches Beispiel
Lassen
n = 30
.
Der größte Teiler von:
1. 30 is 15 --> 30 - 15 = 15
2. 15 is 5 --> 15 - 5 = 10
3. 10 is 5 --> 10 - 5 = 5
4. 5 is 1 --> 5 - 1 = 4
5. 4 is 2 --> 4 - 2 = 2
6. 2 is 1 --> 2 - 1 = 1
Es dauert 6 Schritte zu erreichen 1
.
Eingang
- Eingabe ist eine ganze Zahl
n
, wobein ≥ 2
. - Ihr Programm sollte die Eingabe bis zum maximalen Ganzzahlwert der Sprache unterstützen.
Ausgabe
- Geben Sie einfach die Anzahl der Schritte wie
6
. - Führende / nachfolgende Leerzeichen oder Zeilenumbrüche sind in Ordnung.
Beispiele
f(5) --> 3
f(30) --> 6
f(31) --> 7
f(32) --> 5
f(100) --> 8
f(200) --> 9
f(2016^155) --> 2015
Bedarf
- Sie können Eingaben von
STDIN
Befehlszeilenargumenten als Funktionsparameter oder von der nächstgelegenen Entsprechung erhalten. - Sie können ein Programm oder eine Funktion schreiben. Wenn es sich um eine anonyme Funktion handelt, geben Sie bitte ein Beispiel für den Aufruf an.
- Dies ist Code-Golf, also gewinnt die kürzeste Antwort in Bytes.
- Standardlücken sind nicht zulässig.
Diese Serie gibt es auch bei OEIS: A064097
Ein durch
a(1) = 0
unda(p) = 1 + a(p-1)
if induktiv definierter Quasi-Logarithmusp
ist prim unda(n*m) = a(n) + a(m)
ifm,n > 1
.
2^32 - 1
. Der Rest liegt bei Ihnen und Ihrem System. Hoffe, das hast du mit deiner Frage gemeint.