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\).
피사의 레오나르도라고도 알려진 이탈리아 수학자 레오나르도 피보나치의 이름을 따서 명명되었습니다.
 
입력
문자열은 정수 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!