
자연수 A를 B번 곱한 수를 알고 싶다. 단 구하려는 수가 매우 커질 수 있으므로 이를 C로 나눈 나머지를 구하는 프로그램을 작성하시오.
첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.
첫째 줄에 A를 B번 곱한 수를 C로 나눈 나머지를 출력한다.
정보
목표
제약 조건
아이디어
지수법칙 사용
나머지 값의 성질
위 두가지가 키다.
위 내용을 이용해 분할 정복을 접목하여 풀면?
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ1629 {
static long C;
private static void solution() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
long A = Long.parseLong(st.nextToken());
long B = Long.parseLong(st.nextToken());
C = Long.parseLong(st.nextToken());
System.out.println(compute(A, B));
}
static long compute(long a, long b) {
if (b == 1) {
return a % C;
}
long tmp = compute(a, b / 2);
if (b % 2 == 1) {
return (tmp*tmp % C) * a % C;
}
return tmp * tmp % C;
}
public static void main(String[] args) throws IOException {
BOJ1629.solution();
}
}
