알고리즘/백준[baekjoon]

[baekjoon] 백준 1629번 : 곱셈 (by python 파이썬) 수학, DAC(분할정복)

코딩하는이씨 2022. 8. 19. 14:09
728x90
반응형

정답 code

# 곱셈
import sys
input = sys.stdin.readline

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

def power(a,b):
    if b == 1:
        return a%c
    else:
        tmp = power(a,b//2)
        if b%2 == 0:
            return tmp * tmp % c #b가 짝수
        else:
            return tmp*tmp* a % c #b가 홀수

print(power(a,b))

 

solution

이 문제는 단순하게 모두 곱한후 나누면 시간초과가 난다.

따라서 분할정복을 통해 나눠서 계산해줘야되는데

10 ^ 11 = 10^5 * 10^5 * 10 이런식으로 분할하여 시간을 줄여주는 것이다.

 

만약 b가 짝수라면 a를 한번더 곱해주지 않고

10 ^ 10 = 10^5 * 10^5 로 가능하다

 

따라서,

짝수인 경우 tmp * tmp % c

홀수인경우 tmp * tmp * a % c

를 통해 해결 할 수있다.

 

728x90
반응형