Модуль: Функция Эйлера и другие задачи теории чисел


9. **Числа Фибоначчи по модулю (С++)

☰ Теория

Числа Фибоначчи по модулю

Для эффективного нахождения числа Фибоначчи воспользуемся матричным умножением, подробнее здесь.
 
Зная, что 
\(F_{n+m} = F_m F_{n+1} + F_{m-1} F_n\), запишем рекуррентное соотношение для матричного произведения:
• если \(m = n\), то \(F_{2n} = F_n F_{n+1} + F_{n-1} F_n\);
• если \(m = n + 1\), то \(F_{2n+1} = F_{n+1} F_{n+1} + F_n F_n\).
 

Как известно, последовательность Фибоначчи определяется следующим образом:
\(F(0) = 0,\ F(1) = 1,\ F(n) = F(n – 1) + F(n – 2)\), для всех \(n > 1\).
Названа она в честь итальянского математика Леонардо Фибоначчи, известного также под именем Леонардо Пизанского.
 
Входные данные
Строка содержит целое число n (\(1 <= n <= 10^{18}\)).
 
Выходные данные
Вывести значение F(n), вычисленное по модулю \(10^8\).

Вставьте в программу недостающий фрагмент кода.

 

Примеры
Входные данные Выходные данные
1 30 832040

 


Вставьте недостающие фрагменты кода
C++
Напишите программу ниже
#include <iostream>
#include <map>

using namespace std;

#define MOD 100000000

map<long, long> F;

long fib(long n)
{       
}

long a;

int main()
{
	
	cin >> a;
	cout << fib(a);
	return 0;
}