https://www.acmicpc.net/problem/1629
아주 쉽지 않았다. 해설을 보고 풀었다.
재귀는 일반 항을 어느정도 가늠 후에 작은 수로 검증을 해보고 귀납법을 적용해보는 게 중요한 것 같다.
귀납적 사고? 쉽지 않다.
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <string>
#include <map>
#include <limits.h>
#include <queue>
#include <set>
#include <math.h>
#include <stack>
#include <deque>
#define ll long long
using namespace std;
ll ans(ll a, ll b, ll c) {
if (b == 1) return a % c;
ll mod = ans(a, b / 2, c);
// 2n으로 만들어주는 거임
mod = mod * mod % c;
if (b % 2 == 0) return mod;
return mod * a % c;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
ll a, b, c;
cin >> a >> b >> c;
cout << ans(a, b, c);
return 0;
}
'PS > BOJ' 카테고리의 다른 글
[백준] 1074. Z(c++) (0) | 2025.03.02 |
---|---|
[백준] 11729. 하노이 탑 이동 순서(c++) (0) | 2025.03.02 |
[백준] 6593. 상범 빌딩(c++) (0) | 2025.03.02 |
[백준] 2468. 안전영역(c++) (0) | 2025.03.02 |
[백준] 2667. 단지번호붙이기(c++) (0) | 2025.03.02 |