• 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;
}