[백준/파이썬] 1629번 곱셈 풀이

업데이트:



문제 정보


풀이

문제

A^B mod C를 계산하는 문제입니다.

지수가 매우 크므로 단순 반복 곱셈 대신 빠른 거듭제곱(분할 정복)을 사용해야 합니다.

코드

a, b, c = map(int, input().split())

def power(a, b, c):
    if b==1:
        return a%c
    elif b%2==0:
        tmp = power(a, b//2, c)
        return (tmp%c*tmp)%c
    else:
        tmp = power(a, (b-1)//2, c)
        return ((tmp%c*tmp)%c*a)%c
print(power(a%c,b,c))

설명

지수를 절반씩 줄여 재귀 호출합니다.

  • b가 짝수면 (a^(b/2))^2
  • b가 홀수면 (a^((b-1)/2))^2 * a

각 단계에서 % c를 적용해 수 크기를 제한합니다.



댓글남기기