분할 정복을 이용하는 문제
b
가 반으로 계속 나눠 1
이 될 때까지 재귀 호출을 한다.func(a,b/2,c) * func(a,b/2,c)
를,func(a,b/2,c) * func(a,b/2+1,c)
를 호출#include <iostream>
#include <vector>
using namespace std;
long long func(long long a, long long b, long long c) {
if (b == 1) return a % c;
if (b % 2 == 1) return ((func(a, b / 2, c) % c) * (func(a, b / 2 + 1, c) % c)) % c;
else return ((func(a, b / 2, c) % c) * (func(a, b / 2, c) % c)) % c;
}
int main()
{
int a, b, c;
cin >> a >> b >> c;
cout << func(a, b, c);
return 0;
}