문제
자연수 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));
}
}
<링크>
반응형
'백준' 카테고리의 다른 글
백준 / BOJ / 11441 / 합 구하기 (0) | 2021.11.07 |
---|---|
백준 / BOJ / 11660 / 구간 합 구하기 5 (0) | 2021.11.06 |
백준 / BOJ / 11659 / 구간 합 구하기4 (0) | 2021.11.05 |
백준 / BOJ / 1715 / 카드 정렬하기 (0) | 2021.11.04 |
백준/ BOJ / 1339 / 단어 수학 (0) | 2021.11.03 |
댓글