[필수 문제] 거듭 제곱 구하기 L
2021. 2. 14. 23:37ㆍ코딩 테스트/필수 문제
1. 문제
n과 m이 주어질 때, n의 m승을 구하는 프로그램을 작성하시오. 단, n의 m승의 값이 커질 수 있기 때문에, 정답을 10,007 으로 나눈 나머지를 출력한다.
입력
첫 번째 줄에 숫자 n과 m이 주어진다. ( 1 ≤ n ≤ 100, 1 ≤ m ≤ 1,000,000,000,000,000,000 )
출력
첫째 줄에 n의 m승을 10,007 으로 나눈 나머지를 출력한다.
예제 입력
3 4
예제 출력
81
2. 풀이
이 문제는 예제를 통해 이해할 수 있다.
n = 2, m = 20 일 경우
- = 2^10 x 2^10
- = 2^5 x 2^5 x 2^5 x 2^5
n = 2, m = 9 일 경우
- = 2 x 2^8
- = 2 x 2^4 x 2^4
import java.io.*;
import java.util.StringTokenizer;
public class Main {
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
private static int[] arr;
public static void main(String[] args) throws IOException {
StringTokenizer st = new StringTokenizer(br.readLine());
long n = Long.parseLong(st.nextToken());
long m = Long.parseLong(st.nextToken());
/*
n = 2, m = 20
2^20 = 2^10 * 2^10 = 1024 * 1024
n = 2, m = 27
2^27 = 2 * 2^26 = 2 * 2^13 * 2^13
*/
bw.write(getPow(n, m) + "");
br.close();
bw.flush();
bw.close();
}
private static long getPow(long n, long m) {
if(m == 0) return 1;
else {
if(m % 2 == 0) { // m이 짝수 일 때
long tmp = getPow(n, m/2);
return tmp * tmp % 10007;
} else { // m이 홀수 일 때
long tmp = getPow(n, m-1);
return n * tmp % 10007;
}
}
}
}
728x90
'코딩 테스트 > 필수 문제' 카테고리의 다른 글
[필수 문제]피보나치 수 (0) | 2021.02.15 |
---|---|
[필수 문제] goodseq (0) | 2021.02.15 |
[필수 문제] 연속 부분 최대합 (0) | 2021.02.14 |
[필수 문제] 공통 조상 찾기 (0) | 2021.02.14 |