728x90
- https://www.acmicpc.net/problem/1629
1629번: 곱셈
첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.
www.acmicpc.net
풀이
- 지수가 0, 1, 홀수, 짝수 일 경우에 대한 점화식을 구한다.
코드
import java.io.*
fun main(args: Array<String>) {
val br = BufferedReader(InputStreamReader(System.`in`))
val (A, B, C) = br.readLine().split(" ").map { it.toLong() }
println("${cal(A, B, C) % C}")
}
// A : 자연수
// B : 지수
// C : 나누는 수
private fun cal(a: Long, b: Long, c: Long): Long {
return when (b) {
0L -> 1L
1L -> a
else -> {
// 지수가 짝수일 경우
if (b % 2 == 0L) {
val temp = cal(a, b / 2, c) % c
(temp * temp) % c
} else {
val temp = cal(a, b / 2, c) % c
(((temp * temp) % c) * a) % c
}
}
}
}
728x90
'알고리즘' 카테고리의 다른 글
[KOTLIN] 멀쩡한 사각형 (0) | 2022.02.15 |
---|---|
[프르그래머스][KOTLIN] 49189 가장 먼 노드 (1) | 2022.01.25 |
[백준][KOTLIN] 2630 색종이 만들기 (0) | 2022.01.03 |
분할 정복(Divide & Conquer) (0) | 2022.01.03 |
[백준][KOTLIN] 13305 주유소 (0) | 2021.12.27 |