R00376
일반화 피보나치
레이팅
의견: 0
설명
수열 \(a\) 가 다음과 같이 정의된다.
- \(a_0, a_1\) 이 주어진다.
- \(n \ge 2\) 에 대해 \(a_n = a_{n-1} + a_{n-2}\).
정수 \(N\) 이 주어질 때 \(a_N\) 을 \(1{,}000{,}000{,}007\) 로 나눈 나머지를 구하여라.
\(N\) 이 최대 \(10^{18}\) 까지 가능하므로 한 항씩 계산하는 방법으로는 풀 수 없다. \(2 \times 2\) 행렬
$$ \begin{pmatrix} 1 & 1 \\ 1 & 0 \end{pmatrix} $$
의 거듭제곱을 빠른 거듭제곱(분할 정복)으로 계산하면 \(O(\log N)\) 에 해결할 수 있다.
제약
\(0 \le a_0, a_1 \le 10^9\)
\(0 \le N \le 10^{18}\)
입력 형식
첫째 줄에 \(a_0\), \(a_1\), \(N\) 이 공백으로 구분되어 주어진다.
출력 형식
\(a_N \bmod 1{,}000{,}000{,}007\) 을 출력한다.
예제 1
입력
0 1 10
출력
55설명
\(a_0=0, a_1=1\) 인 표준 피보나치이다. \(a_{10} = 55\) 이다.
예제 2
입력
2 3 1
출력
3설명
\(N=1\) 이므로 \(a_1 = 3\) 을 그대로 출력한다.
문제 정보
riseoj 작성
출처 Original
태그
평가 및 의견
일반화 피보나치
개요
Log in to rate problems.
개별 의견
아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.
풀이 제출
일반화 피보나치
게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다.
로그인하고 제출하기