Послідовність Фібоначчі - це добре відома послідовність, у якій кожен запис є сумою попередніх двох, а перші два записи - 1. Якщо ми будемо приймати модуль кожного члена за константу, послідовність стане періодичною. Наприклад, якби ми вирішили обчислити послідовність моди 7, ми отримали б наступне:
1 1 2 3 5 1 6 0 6 6 5 4 2 6 1 0 1 1 ...
Це період 16. Пов'язана послідовність, яка називається послідовністю Pisano , визначається такою, що a(n)
є періодом послідовності поля при обчисленні модуля n.
Завдання
Ви повинні написати програму або функцію, яка, коли вона n
буде дана , обчислює та виводить період моду послідовності Фібоначчі n
. Це п’ятий термін у послідовності Pisano.
Ви повинні підтримувати лише цілі числа в діапазоні 0 < n < 2^30
Це змагання з кодового гольфу, тому ви повинні прагнути до мінімізації розміру вихідного коду, який набирається байтами.
Тестові кейси
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)
може приймати максимум n^2
значень мод n
. Таким чином, n
обмежений 2^30
обсяг може закінчитися періодом до 2^60
. Обмеження n <= 2^16
дало б P(n) <= 2^32
.
f(i+2) = f(i+1)+f(i)
, таким чином, "стан" циклу машин за період може бути описаний парою цілих чисел mod n
. Є в більшості n^2
штатів, тому період - це максимум n^2
. Ой! У Вікіпедії стверджується, що період є не більше 6n
. Не забудьте про мою дріб'язковість.