haechandev
알고리즘

[백준 - 11444] 피보나치 수 6

아주 큰 n번째 피보나치 수를 2×2 행렬의 빠른 거듭제곱으로 구한 풀이.

2022년 8월 26일

n이 매우 커서 앞에서부터 피보나치 수를 더하는 방식은 사용할 수 없다. 피보나치 점화식은 아래 행렬의 거듭제곱으로 표현할 수 있다.

|1 1|^n
|1 0|

이 행렬의 원소에는 F(n+1), F(n)이 들어간다. 그래서 지수를 절반으로 나누며 행렬을 제곱했다.

  • 지수가 짝수면 A^(n/2)를 구한 뒤 제곱한다.
  • 지수가 홀수면 제곱한 뒤 기준 행렬을 한 번 더 곱한다.

재귀 깊이는 n이 아니라 log n이 된다. 모든 행렬 곱셈에서 바로 나머지를 적용해 값이 커지는 것도 막았다.

문제: 11444 피보나치 수 6 · 코드: GitHub에서 보기