ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 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

    댓글

Designed by Tistory.