-
[백준] 1629. 곱셈PS/Java 2022. 3. 31.
자연수 A를 B번 곱한 수를 알고 싶다. 단 구하려는 수가 매우 커질 수 있으므로 이를 C로 나눈 나머지를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.
출력
첫째 줄에 A를 B번 곱한 수를 C로 나눈 나머지를 출력한다.
예제 입력 1
10 11 12
예제 출력 1
4
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static long A; public static long B; public static long C; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); A = Long.parseLong(st.nextToken()); B = Long.parseLong(st.nextToken()); C = Long.parseLong(st.nextToken()); System.out.println(pow(A, B)); } public static long pow(long num, long exp) { if(exp == 1) { return num % C; } long tmp = pow(num, exp / 2); if(exp % 2 == 1) { return (tmp * tmp % C) * num % C; } else { return tmp * tmp % C; } } }
분할 정복을 이용한다.
곱하는 횟수가 홀수일 경우엔 (A*A)*A이므로
if(exp % 2 == 1) { return (tmp * tmp % C) * num % C; }
이렇게 처리를 한다.
'PS > Java' 카테고리의 다른 글
[백준] 4948. 베르트랑 공준 (0) 2022.03.31 [백준] 1929. 소수 구하기 (0) 2022.03.31 [백준] 2573. 빙산 (0) 2022.03.31 [백준] 11758. CCW (0) 2022.03.31 [백준] 3495. 아스키 도형 (0) 2022.03.31