아래 문제에서 우리는 이진수를 사용하여, 거듭 제곱을 시간 복잡도 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
'알고리즘(アルゴリズム) > 알고리즘 이모저모(アルゴリズムの緒論)' 카테고리의 다른 글
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 |