728x90
분할정복 문제입니다.
(A^B) % C를 출력하면 됩니다.
B를 전부 하나하나 곱하면은 시간초과가 날 수 있습니다.
2^4의 경우
4^2와 동일합니다.
2^8의 경우
4^4
16^2와 동일합니다.
이처럼 2로 나누어 떨어질 경우 그 수로 곱한 후
승수를 2로 나눈 만큼 제곱하면 됩니다.
#include <iostream>
using namespace std;
int A, B, C;
int divCon(int n, int k) {
int result;
int x;
if (k == 0) {
return 1;
}
x = divCon(n, k / 2);
result = 1LL * x * x % C;
if (k % 2) {
result = 1LL * result * n % C;
}
return result;
}
int main(int argc, char *argv[])
{
cin >> A;
cin >> B;
cin >> C;
cout << divCon(A, B) << endl;
}
'알고리즘' 카테고리의 다른 글
[C++] 백준 1476번 날짜 계산 (0) | 2019.09.09 |
---|---|
[C++] 백준 10953번 A+B - 6 (0) | 2019.09.08 |
[C++] 백준 1780번 종이의 개수 (0) | 2019.09.08 |
[C++] 백준 1992번 쿼드트리 (0) | 2019.09.08 |
[C++] 백준 2630번 색종이 만들기 (0) | 2019.09.08 |