| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 0.5 초 (추가 시간 없음) | 128 MB | 98905 | 27329 | 19952 | 26.676% |
자연수 A를 B번 곱한 수를 알고 싶다. 단 구하려는 수가 매우 커질 수 있으므로 이를 C로 나눈 나머지를 구하는 프로그램을 작성하시오.
첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.
첫째 줄에 A를 B번 곱한 수를 C로 나눈 나머지를 출력한다.
10 11 12
4
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long A = sc.nextInt();
long B = sc.nextInt();
long C = sc.nextInt();
System.out.println(pow(A, B, C));
}
public static long pow(long A, long exponent, long C) {
// 기저조건: 지수가 1일 때
if (exponent == 1) {
return A % C;
}
// A^(exponent/2)를 먼저 계산
long temp = pow(A, exponent / 2, C);
temp = temp * temp % C; // (A^(exponent/2))^2 계산
// 지수가 홀수라면 A를 한번 더 곱해준다.
if(exponent % 2 == 1) {
return (temp * A) % C;
}
return temp;
}
}