본문 바로가기
백준

백준 / BOJ / 1629 / 곱셈

by 너츠너츠 2021. 11. 6.

문제

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

입력

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

출력

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

해설

이 문제는 계산값을 처리할 때 long의 범위를 생각하며 풀어나간다면 쉽게 해결되는 문제입니다.

 

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

public class Main {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer st;
    static StringBuilder sb = new StringBuilder("");

    static int A, B, C;

    static void input() throws IOException {
        st = new StringTokenizer(br.readLine());
        A = Integer.parseInt(st.nextToken());
        B = Integer.parseInt(st.nextToken());
        C = Integer.parseInt(st.nextToken());
    }

    static long process(int b){
        if(b > 1){
            long value = process(b/2) % C;
            if(b%2 == 1) return value * value % C * A % C;
            return value* value%C;
        }
        return A%C;
    }

    public static void main(String[] args) throws IOException{
        input();
        System.out.println(process(B));
    }
}

 

<링크>

https://www.acmicpc.net/problem/1629

반응형

댓글