Ispirato da questa domanda alla Matematica .
Il problema
Lascia che
n
sia un numero naturale≥ 2
. Prendi il più grande divisore din
- che è diverso dan
se stesso - e sottralon
. Ripeti fino ad ottenere1
.
La domanda
Quanti passaggi sono necessari per raggiungere 1
un determinato numero n ≥ 2
.
Esempio dettagliato
Let
n = 30
.
Il più grande divisore di:
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
Ci vogliono 6 passi per raggiungere 1
.
Ingresso
- L'input è un numero intero
n
, doven ≥ 2
. - Il tuo programma dovrebbe supportare input fino al valore intero massimo della lingua.
Produzione
- Emetti semplicemente il numero di passaggi, come
6
. - Gli spazi bianchi o le righe iniziali / finali vanno bene.
Esempi
f(5) --> 3
f(30) --> 6
f(31) --> 7
f(32) --> 5
f(100) --> 8
f(200) --> 9
f(2016^155) --> 2015
Requisiti
- È possibile ottenere input da
STDIN
argomenti della riga di comando, come parametri di funzione o dall'equivalente più vicino. - È possibile scrivere un programma o una funzione. Se si tratta di una funzione anonima, si prega di includere un esempio di come invocarlo.
- Questo è code-golf, quindi la risposta più breve in byte vince.
- Le scappatoie standard non sono ammesse.
Questa serie è disponibile anche su OEIS: A064097
Un quasi-logaritmo definito induttivamente da
a(1) = 0
ea(p) = 1 + a(p-1)
sep
è primo ea(n*m) = a(n) + a(m)
sem,n > 1
.
2^32 - 1
. Il resto dipende da te e dal tuo sistema. Spero, questo è ciò che intendevi con la tua domanda.