[백준] 1629 - 곱셈 (java)

HaYeong Jang·2021년 1월 24일
0

[백준] 알고리즘

목록 보기
20/62
post-thumbnail

문제

자연수 A를 B번 곱한 수를 알고 싶다. 단 구하려는 수가 매우 커질 수 있으므로 이를 C로 나눈 나머지를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.

출력

첫째 줄에 A를 B번 곱한 수를 C로 나눈 나머지를 출력한다.

예제 입력

10 11 12

예제 출력

4

코드

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    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());

        long A = Long.parseLong(st.nextToken());
        long B = Long.parseLong(st.nextToken());
        long C = Long.parseLong(st.nextToken());

        bw.write(pow(A, B, C) + "\n");

        br.close();
        bw.flush();
        bw.close();
    }

    private static long pow(long A, long B, long C) {
        if (B == 1) {
            return A % C;
        }

        if (B % 2 == 1) {   // 홀수승인 경우
            return ( pow(A, B - 1, C) * A ) % C;
        } else {    // 짝수승인 경우
            long half = pow(A, B / 2, C);
            return (half * half) % C;
        }
    }
}

정리

홀수인 경우 짝수승으로 만들어주어서 계산하였다.

profile
기억하기 위해 기록하는 개발로그👣

0개의 댓글