분할정복법
신기하다.
Integer의 max value로 세번만 곱해져도 long범위 넘어갈수도 있으니
long의 범위를 넘기지 않기 위해 수시로 모듈러연산을 해주어야한다!
https://st-lab.tistory.com/237
좋은 설명 감사합니다
[백준] 1629번 : 곱셈 - JAVA [자바]
www.acmicpc.net/problem/1629 1629번: 곱셈 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다. www.acmicpc.net 문제 알고리즘 [접근 방법] 이 문..
st-lab.tistory.com
import java.util.*;
import java.io.*;
public class s1_1629 {
static long a;
static long c;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
a = Integer.parseInt(st.nextToken());
long b = Integer.parseInt((st.nextToken()));
c = Integer.parseInt(st.nextToken());
long ans = daq(b);
bw.write(String.valueOf(ans));
bw.flush();
bw.close();
}
//daq(k) = Math.pow(a, k) mod c 를 분할정복하는 코드
public static long daq(long k){
if (k == 1){
return (a % c);
}
else{
long temp = daq(k / 2);
if ((k & 1) == 0){
return temp * temp % c;
}
else{
return ((temp * temp % c) * (a % c)) % c;
}
}
}
}
'PS > Problems' 카테고리의 다른 글
[Java] CodeForces Hello 2022 B.Integer shop (0) | 2022.01.04 |
---|---|
[Java] 백준 24040번 예쁜 케이크 - 정수론 (0) | 2022.01.01 |
[Java] 백준 1167번 트리의 지름 (0) | 2022.01.01 |
[Java] 백준 7662번 - TreeMap (시간복잡도 log n) (0) | 2021.12.30 |
[Java] 백준 11724번 - 양방향 그래프 (0) | 2021.12.28 |