백준/일반 문제
[백준/BOJ] 1629 - 곱셈 (c++) (분할정복)
sem;
2021. 3. 25. 14:21
반응형
1. 문제
2. 풀이
A의 B승은 A의 B/2승의 제곱과 같다.
위와 같이 지수가 짝수일 경우 단지 지수를 반으로 쪼개기만 하면 되었지만
아래의 수식과 같이 지수가 홀수일 경우 반으로 쪼개는 것과 동시에 밑을 하나 더 곱해주면 된다.
3. 소스코드
#include <stdio.h>
typedef long long ll;
int a, b, c;
ll power(long long n, long long m) {
if (m == 0) return 1;
ll res = power(n, m / 2) * power(n, m / 2) % c;
if (m % 2) return res * n % c;
return res;
}
int main() {
scanf("%d %d %d", &a, &b, &c);
printf("%lld", power(a, b));
}
4. 참고
질문, 고칠점 등 댓글 언제나 환영입니다.
반응형