# 생각

매우 큰 단위이므로 int가 아닌 long long으로 선언해줘야 한다

 

2^10은 2^5 * 2^5로 구할 수 있기 때문에

재귀식을 이용하여 절반을 곱해준 결과의 나머지를 반환 해주면 된다

 

단, 홀수일 경우 곱할 수를 다시 곱해줘야하고 짝수일 경우에는 그대로 반환해주면 된다

 

 

# 전체 코드

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

void fastIO() { ios::sync_with_stdio(false); cin.tie(nullptr); }

ll power(ll a, ll b, ll c)
{
	if (b == 1)
	{	// base condition
		return a % c;
	}

	ll ans = power(a, b * 0.5, c);
	ans = (ans * ans) % c;
	if (b & 1)
	{
		return ans * a % c;
	}
	else
	{
		return ans;
	}
}

int main()
{
	fastIO();
	ll a, b, c;
	cin >> a >> b >> c;
	cout<< power(a, b, c);
}

 


https://www.acmicpc.net/problem/1629

 

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

[BOJ] 2178_미로 탐색.cpp  (0) 2022.05.31
[BOJ] 4375_1.cpp  (0) 2022.05.31
[BOJ] 3986_좋은 단어.cpp  (0) 2022.05.30
[BOJ] 1940_주몽.cpp  (0) 2022.05.30
[BOJ] 1213_팰린드롬 만들기.cpp  (0) 2022.05.30

+ Recent posts