본문 바로가기

알고리즘

[백준][KOTLIN] 1629 곱셉

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