[ 문제 ]
자연수 A를 B번 곱한 수를 알고 싶다. 단 구하려는 수가 매우 커질 수 있으므로 이를 C로 나눈 나머지를 구하는 프로그램을 작성하시오.
모듈러 공식
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static int A, B, C;
public static void main(String[] args) throws IOException {
// 지수 법칙, 모듈러 성질
StringTokenizer st = new StringTokenizer(br.readLine());
A = Integer.parseInt(st.nextToken());
B = Integer.parseInt(st.nextToken());
C = Integer.parseInt(st.nextToken());
// 모듈러 성질을 이용하는 문제 -> A^B % C -> (A%C)^B
long ans = div(A, B, C);
System.out.println(ans);
}
private static long div(int a, int b, int c){
if(b == 0) return 1 % c;
if(b == 1) return a % c;
else {
long tmp = div(a, b/2, c);
if(b % 2 == 0) return (tmp * tmp) % c;
else return (((tmp * tmp) % c) * (a % c)) % c;
}
}
}