Die Fibonacci-Folge ist eine bekannte Folge, in der jeder Eintrag die Summe der beiden vorhergehenden und die ersten beiden Einträge 1 ist. Wenn wir das Modulo jedes Terms mit einer Konstanten nehmen, wird die Folge periodisch. Wenn wir uns zum Beispiel dazu entschließen, die Sequenz Mod 7 zu berechnen, erhalten wir Folgendes:
1 1 2 3 5 1 6 0 6 6 5 4 2 6 1 0 1 1 ...
Dies hat eine Periode von 16. Eine verwandte Sequenz, die Pisano-Sequenz genannt wird , ist so definiert, dass dies a(n)
die Periode der Fibonacci-Sequenz ist, wenn sie modulo n berechnet wird.
Aufgabe
Sie sollten ein Programm oder eine Funktion schreiben, die bei Angabe n
die Periode des Fibonacci-Sequenzmods berechnet und ausgibt n
. Dies ist der n-te Term in der Pisano-Sequenz.
Sie müssen nur Ganzzahlen im Bereich unterstützen 0 < n < 2^30
Dies ist ein Code-Golf- Wettbewerb, daher sollten Sie versuchen, die Größe Ihres Quellcodes nach Bytes zu minimieren.
Testfälle
1 -> 1
2 -> 3
3 -> 8
4 -> 6
5 -> 20
6 -> 24
7 -> 16
8 -> 12
9 -> 24
10 -> 60
11 -> 10
12 -> 24
f(i),f(i+1)
höchstens n^2
Werte mod annehmen können n
. Somit könnte n
begrenzt auf 2^30
einen Zeitraum von bis zu produzieren 2^60
. Einschränkung n <= 2^16
würde geben P(n) <= 2^32
.
f(i+2) = f(i+1)+f(i)
, dass der 'Status' einer Maschine, die über den Zeitraum eine Schleife durchläuft, mit einem Paar Ganzzahlen mod beschrieben werden kann n
. Es gibt höchstens n^2
Staaten, also höchstens eine Periode n^2
. Oh! Wikipedia behauptet, dass die Periode höchstens ist 6n
. Vergiss meine Trivialität.