문제
자연수 A를 B번 곱한 수를 알고 싶다. 단 구하려는 수가 매우 커질 수 있으므로 이를 C로 나눈 나머지를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.
출력
첫째 줄에 A를 B번 곱한 수를 C로 나눈 나머지를 출력한다.
예제 입력 | 예제 출력 |
10 11 12 | 4 |
풀이
# *** 오답: 시간 초과
a, b, c = map(int, input().split())
answer = (a ** b) % c
print(answer)


곱셈의 개수를 줄이는 분할 정복이 필요하다
1. B의 값이 홀수인지 짝수인지 파악
2. B 값이 짝수: 10^10 => (10^5)^2 형태로 바꿔줌
B 값이 홀수: 10^11 => (10^5)^2 * 10의 형태로 바꿔줌
def find(a,b):
if b == 1:
return a%c
else:
temp = find(a, b//2)
if b%2 == 0: # b가 짝수 일 때
return (temp*temp)%c
else:
return (temp*temp*a)%c
a, b, c = map(int, input().split())
answer = find(a,b)
print(answer)
'코테 공부 > 백준' 카테고리의 다른 글
[Python/백준] 1759 암호 만들기 (0) | 2022.09.26 |
---|---|
[Python] 2470 두 용액 (0) | 2022.09.23 |
[Python] 9020 골드바흐의 추측 (0) | 2022.09.19 |
[Python] 1026 보물 (매우 쉬움) (0) | 2022.09.19 |
[Python] 4948 베르트랑 공준 (0) | 2022.09.18 |