백준_분할정복_곱셈_1629_파이썬

석준·2022년 8월 18일
0

백준_문제풀이

목록 보기
12/30
post-thumbnail

✅문제 요약

  1. 자연수 A를 B번 곱한 수를 C로 나눈 나머지

✅문제 풀이

처음에 보자마자 A**B%12를 했더니 보기좋기 시간초과가 났다
단순 판별이 아닌 수학적 연산은 시간이 많이 걸리는 것 같다. 이 부분은 후에 CS에서 다뤄봐야겠다
만약 B제곱 할 때 B가 2 이상이면 이를 나눠서 곱셈했다.
예시를 들면

# 이 논리를 알면 쉽게 풀 수 있다
10**12%12 == (10**5 * 10**5)%12

# 즉 작은값으로 나누다 보면 2 또는 3까지 나눠질 수 있다.
# 이렇게 되면 메모리가 가는 부담이 적어져서 계산이 빨라진다
(10**5)%12 == (10**2 * 10**2 * 10**1)%12 == (10**2%12 * 10**2%12 * 10**1%12)

이런 식으로 분할하여 1이 될때까지 나눠갔다

import sys
a, b, c = map(int, sys.stdin.readline().split())

def multi(a, n):
	if n==1:
    	return a%c
    else:
    	tmp = multi(a, n//2)
        if n%2==0:
        	return (tmp*tmp)%c
        else:
        	return (tmp*tmp*a)%c
profile
파이썬 서버 개발자 지망생

0개의 댓글