아래 문제에서 우리는 이진수를 사용하여, 거듭 제곱을 시간 복잡도 O(log N)으로 구하였다.
https://jbluke.tistory.com/186
B=1;
// R! 구하기
for(ll i = 1; i <= R; i++){
B *= i;
B %= MOD;
}
// R!(N-R)! 구하기
for(ll i = 1; i <= N - R; i++){
B *= i;
B %= MOD;
}
Q. 그럼 행렬의 거듭 제곱은 어떻게 구하면 될까??
A. 위 코드에서 B=1 부분이 있다.
만약 행렬 A가 있다고 하자.
행렬 A를 곱했을 때, 그 결과가 행렬 A로 나오게 하기 위해서는 어떤 행렬에 행렬A를 곱해야 할까??
단위 행렬을 만들면 된다. ( 단위 행렬 X 행렬 A = 행렬 A)
이 단위 행렬 이외에는, 정수의 거듭 제곱을 구하는 방법과 같다.
( 아래 문제를 참고1)
https://www.acmicpc.net/problem/10830
'알고리즘(アルゴリズム) > 알고리즘 이모저모(アルゴリズムの緒論)' 카테고리의 다른 글
Parametric Search Algorithm( 백준 1654번 ) (0) | 2023.03.09 |
---|---|
점화식은 행렬의 거듭 제곱을 이용해서, DP 보다 빠르게 구할 수가 있다 (0) | 2023.01.31 |
정적 할당 VS 동적 할당 - 메모리 교환 (0) | 2023.01.29 |
백준 11401번 ( 합동식 ) (0) | 2023.01.29 |
pre-condition을 고려하며 function 작성하자!!!! (0) | 2023.01.28 |