Home BOJ 1629번 곱셈 파이썬
Post
Cancel

BOJ 1629번 곱셈 파이썬

문제

자연수 A를 B번 곱한 수를 알고 싶다. 단 구하려는 수가 매우 커질 수 있으므로 이를 C로 나눈 나머지를 구하는 프로그램을 작성하시오.

입력

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

출력

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
a,b,c = map(int,input().split())

sum = 0
#memo = {}
def rec(x): #x는 b
    if x == 1:
        return a%c
    else:
        tmp = rec(x//2)
        if x%2 == 0: #짝수
            return (tmp * tmp)%c
        else:
            return (tmp* tmp *a)%c

sum = rec(b)
print(sum)

a와 b에 너무 큰 수가 들어와서 오버플로우가 생겨도 시간초과가 나므로 미리 c로 나머지를 구한다.

분배법칙에 의해서 다음과 같이 된다.

This post is licensed under CC BY 4.0 by the author.

BOJ 15650 N과 M (2) 파이썬

BOJ 16953번 A → B 파이썬