Sekwencja Fibonacciego jest sekwencją dobrze wiedzieć, w którym każdy wpis jest sumą dwóch poprzednich i pierwszych dwóch pozycjach są: 1. Jeśli weźmiemy modulo każdego terminu przez stałą sekwencję staną się okresowe. Na przykład, jeśli zdecydujemy się obliczyć mod sekwencyjny 7, otrzymamy:
1 1 2 3 5 1 6 0 6 6 5 4 2 6 1 0 1 1 ...
Ma to okres 16. Powiązana sekwencja, zwana sekwencją Pisano , jest zdefiniowana tak, że a(n)
jest to okres sekwencji Fibonacciego przy obliczaniu modułu.
Zadanie
Powinieneś napisać program lub funkcję, która, gdy n
zostanie podana , obliczy i wyświetli okres modyfikacji sekwencji Fibonacciegon
. To jest n-ty termin w sekwencji Pisano.
Musisz obsługiwać tylko liczby całkowite w zakresie 0 < n < 2^30
To jest golf golfowy zawody w więc powinieneś dążyć do zminimalizowania rozmiaru kodu źródłowego według liczby bajtów.
Przypadki testowe
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)
może przyjąć co najwyżej n^2
wartości mod n
. Zatem n
ograniczony do 2^30
może zakończyć się nawet do 2^60
. Ograniczenie n <= 2^16
dałoby P(n) <= 2^32
.
f(i+2) = f(i+1)+f(i)
, że „stan” zapętlenia maszyny w tym okresie można opisać za pomocą pary liczb całkowitych mod n
. Są co najwyżej n^2
stany, więc okres jest co najwyżej n^2
. O! Wikipedia twierdzi, że okres ten jest co najwyżej 6n
. Nieważne, moja trywialność.