01. 문제
https://www.acmicpc.net/problem/1629
1629번: 곱셈
첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.
www.acmicpc.net
02. 코드
#include <iostream>
using namespace std;
int a, b, c;
long long power(int n, int k) {
if (k == 0) return 1;
if (k == 1) return n;
long long tmp = power(a, k / 2);
if (k % 2) {
return ((tmp * tmp)%c * a) % c;
}
return (tmp * tmp) % c;
}
int main() {
cin >> a >> b >> c;
cout << power(a%c, b) << endl;
}
03. 풀이 전략
a와 b의 수가 큰 경우,
a^b를 구하는 방법은 다음과 같다.
power(a, b) = 1 (b가 0인 경우)
power(a, b) = a (b가 1인 경우)
power(a, b/2)^2 (b가 짝수인 경우)
power(a, b/2)^2*a (b가 홀수인 경우)
또한, 기회가 보이면 %c 를 바로 해줘야 하고, 큰 범위를 가지므로 long long 자료형을 사용해야 한다.
'알고리즘 > Baekjoon Online Judge' 카테고리의 다른 글
[stable_sort]https://www.acmicpc.net/problem/10814 (0) | 2020.02.25 |
---|---|
[DP] https://www.acmicpc.net/problem/1463 (0) | 2020.02.25 |
큰 수 더하는 고전적인 방법 (0) | 2020.02.24 |
https://www.acmicpc.net/problem/3055 (0) | 2020.01.10 |
https://www.acmicpc.net/problem/4963 (0) | 2020.01.02 |