728x90
문제 출처: https://www.acmicpc.net/problem/1629
1629번: 곱셈
첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.
www.acmicpc.net
문제
자연수 A를 B번 곱한 수를 알고 싶다. 단 구하려는 수가 매우 커질 수 있으므로 이를 C로 나눈 나머지를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.
출력
첫째 줄에 A를 B번 곱한 수를 C로 나눈 나머지를 출력한다.
예제 입력 1
10 11 12
예제 출력 1
4
정답
def power(a, b):
if b == 1:
return a % C
else:
tmp = power(a, b // 2)
if b % 2 == 0:
return tmp * tmp % C
else:
return tmp * tmp * a % C
if __name__ == "__main__":
A, B, C = map(int, input().split())
result = power(A, B)
print(result)
b의 값이 짝수인지 홀수인지 파악을 먼저한 후 b의 값이 짝수라면 10 ^10 -> (10^5)^2 형태로 바꿔주고 b의 값이 홀수라면 10 ^11 -> (10^5)^2 * 10 형태로 바꿔주는 방식으로 진행합니다.
이번 문제는 좀 어려웠던 것 같습니다!
728x90
'코딩 > 백준' 카테고리의 다른 글
[백준/파이썬/수학] 11051번 이항 계수 2 코딩테스트 연습풀이 실버1 (0) | 2022.03.05 |
---|---|
[백준/파이썬/수학] 2914번 저작권 코딩테스트 연습풀이 브론즈5 (0) | 2022.03.04 |
[백준/파이썬/수학] 1094번 막대기 코딩테스트 연습풀이 실버5 (0) | 2022.03.01 |
[백준/파이썬/수학] 1009번 분산처리 코딩테스트 연습풀이 브론즈3 (0) | 2022.02.28 |
[백준/파이썬/수학] 1699번 제곱수의 합 코딩테스트 연습풀이 실버3 (0) | 2022.02.27 |