문제 링크 : https://www.acmicpc.net/problem/1629
문제 설명
를 구하면 된다
알고리즘
1 . A B C 모두 int 형을 초과할 수있어서 long long 형으로 지정해야되고
2. 단순히 A를 B번곱하면 시간초과가 나기에 분할 정복으로 풀어야한다.
3. 2^4 = 4^2 이다 즉 B가 짝수이면 A^B = (A^B/2)^2 이고 B가 홀수 이면 (A^B/2)^2*A 이다 이거 이용하면된다 .
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#include<iostream>
typedef long long ll;
using namespace std;
ll A, B, C;
ll func(ll a, ll b) {
if (b == 1)return a % C;
ll val = func(a, b / 2);
val = (val * val) % C;
if (b % 2)val = (val * a) % C;//b가 홀수.
return val;
}
int main() {
cin >> A >> B >> C;
cout << func(A, B);
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
'c++ > 백준' 카테고리의 다른 글
백준 2343번: 기타레슨 (0) | 2020.04.14 |
---|---|
백준 13904번 : 과제 (0) | 2020.04.13 |
백준 1074번 : Z (0) | 2020.04.13 |
백준 12100번 : 2048(easy) (0) | 2020.04.13 |
백준 1931번: 회의실 배정 (0) | 2020.04.09 |