알고리즘(アルゴリズム)/알고리즘 이모저모(アルゴリズムの緒論)
행렬의 거듭 제곱( feat. 단위 행렬)
JIN_YOUNG _KIM
2023. 1. 31. 09:50
아래 문제에서 우리는 이진수를 사용하여, 거듭 제곱을 시간 복잡도 O(log N)으로 구하였다.
https://jbluke.tistory.com/186
백준 11401번 ( 합동식 )
https://www.acmicpc.net/problem/11401 11401번: 이항 계수 3 자연수 \(N\)과 정수 \(K\)가 주어졌을 때 이항 계수 \(\binom{N}{K}\)를 1,000,000,007로 나눈 나머지를 구하는 프로그램을 작성하시오. www.acmicpc.net 우선,
jbluke.tistory.com
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
10830번: 행렬 제곱
크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수가 매우 커질 수 있으니, A^B의 각 원소를 1,000으로 나눈 나머지를 출력한다.
www.acmicpc.net