Module: 快速取幂


Problem

4/5

**斐波那契数模 (C++)

Theory Click to read/hide

模斐波那契数

为了有效地找到斐波那契数,我们使用矩阵乘法,更多细节在这里
 
知道了 
\(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\).
 

Problem

如你所知,斐波那契数列定义如下:
\(F(0) = 0,\ F(1) = 1,\ F(n) = F(n – 1) + F(n – 2)\ ),对于所有 \(n > 1\)
以意大利数学家莱昂纳多·斐波那契(Leonardo Fibonacci)的名字命名,也被称为比萨的莱昂纳多。
 
输入
该字符串包含一个整数 n (\(1 <= n <= 10^{18}\)).
 
输出
打印 F(n) 值, 计算模 \(10^8\)

将缺少的代码片段粘贴到程序中。

 

例子
<头> <正文>

 

# 输入 输出
1 30 832040
Write the program below
#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;
}       

     

Program check result

To check the solution of the problem, you need to register or log in!