DOTY

6) 백준 1629 - 곱셈 본문

Algorithm/Recursion

6) 백준 1629 - 곱셈

증식세포 2023. 2. 20. 15:29
728x90
반응형

1629번: 곱셈 (acmicpc.net)

 

1629번: 곱셈

첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.

www.acmicpc.net


정말 고민을 많이 했던 문제.

처음 방식은 A를 곱한 수를 C로 나누었을 때 나머지를 이용했다.

하지만 시간 초과로 방법을 찾던 중 곱셈의 횟수를 줄이는 방법을 알았다.

#include <bits/stdc++.h>

using namespace std;


long long divide(long long A, long long B, long long C) {
	cout << "B : " << B << " ";
	if(B == 1) {
		return A%C;
	}
	long long tmp = divide(A, B/2, C) % C;
	cout << "tmp : " << tmp << endl;
	if(B % 2 == 0) {
		return tmp*tmp%C;
	}
	else {
		return tmp*tmp%C*A%C;
	}
}

int main(void) {
	long long A, B, C;
	cin >> A >> B >> C;
	
	cout << divide(A, B, C);
}

분할 정복을 이용하여 거듭제곱의 횟수를 줄일 수 있다.

이 내용은 따로 정리해야겠다.

728x90
반응형

'Algorithm > Recursion' 카테고리의 다른 글

7) 백준 10830 - 행렬 제곱  (0) 2023.02.21
5) 백준 1780 - 종이의 개수  (0) 2023.02.19
4) 백준 1992 - 쿼드트리  (0) 2023.02.19
3) 백준 2630 - 색종이 만들기  (0) 2023.02.18
2) 백준 11729 - 하노이 탑 이동 순서  (0) 2023.02.17
Comments