728x90
https://www.acmicpc.net/problem/1629
package BKD_0x0B_Recursion;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_1629 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
long a = Integer.parseInt( st.nextToken());
long b = Integer.parseInt( st.nextToken());
long c = Integer.parseInt( st.nextToken());
System.out.println(pow(a,b,c));
}
public static long pow(long a, long b, long c){
if(b==1) return a%c; // Base Condition
long val = pow(a, b/2, c);
val = val*val % c;
if(b%2 ==0) return val; // b가 짝수일 경우
return val*a%c; //b 가 홀수일 경우
}
}
❗️시간 복잡도 : O(logb)
풀이
❗️b가 최대 21억 가까이 될 수 있기 때문에 시간 초과가 발생할 가능성이 다분하다.
1승을 계산할 수 있다.
k승을 계산했으면 2k승과 2k+1승 또한 O(1)에 계산할 수 있다.
=> a의 임의의 지수승을 귀납적으로 계산 가능하다.
long val = func(a,b/2,c) * func(a,b/2,c);
위와 같이 코드를 구현했을 경우 시간복잡도가 O(b)가 되어 시간 초과가 발생할 수 있다.
728x90
'🐣 알고리즘 삐약 > 💻 백준 삐약' 카테고리의 다른 글
92 삐약 : 백준 1074| Z [바킹독| 재귀 |JAVA] (0) | 2024.09.10 |
---|---|
91 삐약 : 백준 11729| 하노이탑 이동순서 [바킹독| 재귀 |JAVA] (0) | 2024.09.10 |
89 삐약 : 백준 15656| N과 M (7) [바킹독| 백트래킹 |JAVA] (0) | 2024.08.14 |
88 삐약 : 백준 15655| N과 M (6) [바킹독| 백트래킹 |JAVA] (0) | 2024.08.14 |
87 삐약 : 백준 15654| N과 M (5) [바킹독| 백트래킹 |JAVA] (0) | 2024.08.14 |