- toc {:toc}
๋ฌธ์
์์ฐ์ A๋ฅผ B๋ฒ ๊ณฑํ ์๋ฅผ ์๊ณ ์ถ๋ค. ๋จ ๊ตฌํ๋ ค๋ ์๊ฐ ๋งค์ฐ ์ปค์ง ์ ์์ผ๋ฏ๋ก ์ด๋ฅผ C๋ก ๋๋ ๋๋จธ์ง๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ A, B, C๊ฐ ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ ์์๋๋ก ์ฃผ์ด์ง๋ค. A, B, C๋ ๋ชจ๋ 2,147,483,647 ์ดํ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ A๋ฅผ B๋ฒ ๊ณฑํ ์๋ฅผ C๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.
์ถ์ฒ: https://www.acmicpc.net/problem/1629
ํ์ด
๊ณฑ์ ๋ถ๋ฆฌ๋ฅผ ์๊ฐํ์
๊ท๋ฉ์ ์ผ๋ก ์๊ฐํ ์ ์๋ ํ์ ๊ธฐ๋ฅด์.
1์ผ ๋ ๊ฐ๋ฅํ๊ฐ?
k์ผ ๋ ๊ฐ๋ฅํ๊ฐ? k+1์ผ ๋ ๊ฐ๋ฅํ๊ฐ? โ ์ดํ ์ฑ๋ฆฝํ๋ฉด ์ฌ๊ท
- ์ฌ๊ท๋ ํจ์์ ํ๋ผ๋ฏธํฐ, ์ด๋๊น์ง ๊ณ์ฐํ ์ง, ๋ฆฌํด๊ฐ์ ์ด๋ป๊ฒ ์ค์ ํ ์ง ํ์คํ๊ฒ ์ ํด์ผ ํจ.
- ์ฝ๋๊ฐ ๊ฐ๊ฒฐํ์ง๋ง ๋ฉ๋ชจ๋ฆฌ/์๊ฐ์์ ์ํด๋ฅผ ๋ด
- ํ ํจ์๊ฐ ์๊ธฐ ์์ ์ ์ฌ๋ฌ ๋ฒ ํธ์ถํ๋ฉด ๋นํจ์จ์ ์(์ค๋ณต ๋ถ๋ถ์์)
- ์๊ธฐ ์์ ์ ๋ถ๋ฅผ ๋ ์คํ ์์ญ์ ๊ณ์ ๋์ ๋จ
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll remainder(ll a, ll b, ll c){
if(b == 1) return a % c;
ll val = remainder(a, b/2, c);
val = val * val % c;
if(b%2==0) return val;
return val * a % c;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
ll a, b, c;
cin >> a >> b >> c;
cout << remainder(a, b, c) << endl;
}