끄적끄적 코딩
article thumbnail
Published 2019. 9. 8. 18:21
[C++] 백준 1629번 곱셈 알고리즘

분할정복 문제입니다.

(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

검색 태그