[백준] 곱셈 (1629)(kotlin)

문제 설명

백준 1629번 문제 링크

입력 및 출력

» 입력

첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.

» 출력

첫째 줄에 A를 B번 곱한 수를 C로 나눈 나머지를 출력한다.

예제 입출력(테스트케이스)

입력 출력
10 11 12 4

문제 풀이1

풀이참고

fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
    println(
        readLine()
            .split(" ")
            .map { it.toLong() }
            .let { pow(it[0], it[1], it[2]) }
    )
}

fun pow(A: Long, exp: Long, C: Long): Long {
    if (exp == 1L) return A % C

    val temp = pow(A, exp / 2L, C)

    return if (exp % 2L == 1L) {
        (temp * temp % C) * A % C
    } else {
        temp * temp % C
    }
}