문제 분류 수업 진도 대회 채점현황 순위 질문게시판
게임
스도쿠 타이핑 리듬 타자게임 타이핑 테트리스 타이핑 인베이더 타이핑 지뢰찾기 8192 공룡게임 타이핑 플래피버드 랭킹
로그인

8059 : 피보나치 수열

•시간제한: 3.000 S •메모리제한: 256 MB •제출: 13 •통과: 1 •만든사람: suakii

8059 : 피보나치 수열

시간 3.000s · 메모리 256MB · 제출 13 · 정답 1

문제 설명

피보나치 수열 $F_n$은 다음과 같이 정의됩니다:
- $F_0 = 0$
- $F_1 = 1$
- $F_n = F_{n-1} + F_{n-2}$ ($n \ge 2$)

정수 $n$이 주어질 때, $F_n \pmod{10^9+7}$을 구하는 프로그램을 작성하십시오.



[제약 조건]
• $0 \le n \le 10^{18}$

입력 설명

첫째 줄에 정수 $n$이 주어집니다. ($0 \le n \le 10^{18}$)

출력 설명

$F_n \pmod{10^9+7}$을 출력합니다.

입력 예시
COPY
복사되었습니다!

10

출력 예시
COPY
복사되었습니다!

55

도움

$n$이 매우 크므로 일반적인 $O(n)$ 동적 계획법은 시간 초과가 발생합니다. 행렬 거듭제곱 기법 $\begin{pmatrix} F_{n+1} & F_n \\ F_n & F_{n-1} \end{pmatrix} = \begin{pmatrix} 1 & 1 \\ 1 & 0 \end{pmatrix}^n$을 적용하여 분할 정복으로 행렬을 $O(\log n)$에 거듭제곱하여 빠르게 피보나치 수를 구합니다.

출처/분류

NOTICE  —  BFStudy OJ 정보샘
애들아, 문제 많이 풀고 게임 잠깐 하는거지?
— 정보샘