Module: 高速累乗


Problem

4/5

**フィボナッチ数のモジュロ (C++)

Theory Click to read/hide

モジュロ フィボナッチ数

フィボナッチ数を効率的に見つけるには、行列の乗算を使用します。詳細については、こちらをご覧ください。
 
それを知って 
\(F_{n+m} = F_m F_{n+1} + F_{m-1} F_n\)、漸化式を書き込みます行列積の場合:
• if \(m = n\) then \(F_{2n} = F_n F_{n+1} + F_ { n-1} F_n\);
• if \(m = n + 1\) then \(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\).
ピサのレオナルドとしても知られるイタリアの数学者レオナルド・フィボナッチにちなんで名付けられました.
 
入力
文字列には整数 n (\(1 <= n <= 10^{18}\)) が含まれます。
 
出力
\(10^8\) を法として計算された F(n) 値を出力します。

不足しているコード スニペットをプログラムに貼り付けます。

 

<頭> <本体>

 

# 入力 出力
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!