// 곱셈
package Silver_I_1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Ex1629 {
static long c;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
long a = Long.parseLong(st.nextToken()); // 자연수
long b = Long.parseLong(st.nextToken()); // 지수
c = Long.parseLong(st.nextToken()); // 나누는 수
System.out.println(pow(a, b));
}
static long pow(long a, long exponent) {
if (exponent == 1) { // 지수가 1일떄
return a % c;
}
long temp = pow(a, exponent / 2);
if (exponent % 2 == 1) { // 지수가 홀수일떄
return (temp * temp % c) * a % c;
}
return temp * temp % c; // 지수가 짝수일때
}
}
아래 블로그를 보고 풀었다.
[백준] 1629번 : 곱셈 - JAVA [자바] (tistory.com)
[백준] 1629번 : 곱셈 - JAVA [자바]
www.acmicpc.net/problem/1629 1629번: 곱셈 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다. www.acmicpc.net 문제 알고리즘 [접근 방법] 이 문제는 얼핏
st-lab.tistory.com
제곱이 클때 저렇게 풀면 빠르게 풀수 있다는걸 알았다. 모듈러에 대해서도 알았다.
이것을 이용해서 다음엔 행렬 제곱 문제를 풀어봐야겠다.
'백준 풀이 > 자바(Java)' 카테고리의 다른 글
백준 31306 자바 - Is Y a Vowel? (0) | 2024.06.03 |
---|---|
백준 25784 자바 - Easy-to-Solve Expressions (0) | 2024.06.02 |
백준 16953 자바 - A → B (0) | 2024.05.31 |
백준 26742 자바 - Skarpetki (0) | 2024.05.31 |
백준 11726 자바 - 2×n 타일링 (0) | 2024.05.30 |