시간 제한메모리 제한제출정답맞힌 사람정답 비율
0.5 초 (추가 시간 없음) | 128 MB | 100688 | 27852 | 20334 | 26.725% |
문제
자연수 A를 B번 곱한 수를 알고 싶다. 단 구하려는 수가 매우 커질 수 있으므로 이를 C로 나눈 나머지를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.
출력
첫째 줄에 A를 B번 곱한 수를 C로 나눈 나머지를 출력한다.
예제 입력 1
10 11 12
예제 출력 1
4
출처
- 문제를 만든 사람: author5
알고리즘 분류
문제 - 1 페이지
www.acmicpc.net
코드
import sys
#런타임 에러는 앞에 이걸 추가해주는 방식으로 재귀 깊이를 변경해 줘야함.
#재귀함수를 이용한 분할정복
#sys.setrecursionlimit(100000) #이 문제에서 log(b)는 최대 30정도..
def power(a, b, c):
#왠지 모르겠지만 recursion error가 남. 바킹독 따라 했는데 왜?
# if b==1:
# return a % c #b=1일 때
# val = power(a, b/2, c) #재귀. 일단 b를 절반씩 줄여서 2까지 파고든다.
# val = val * val % c #power의 return값 이용
# if(b%2==0):
# return val #짝수일 때. 맨처음에 실행되는 값은 그러면 (a%c * a%c) % c
# return val * a % c #b가 홀수일 때. 3부터. val대신 3을 쓰는 이유는? 저위에 계산한거에 a 한번만 곱해주면 됨
#recursion 대신 while로.
val=1
while b>0:
if b % 2 != 0: #홀수
val = (val * a) % c
b //= 2
a = (a * a) % c #짝수
return val
a, b, c = map(int, sys.stdin.readline().split())
print(power(a,b,c))
고민거리
바킹독 자료(https://baaaaaaaaaaaaaaaaaaaaaaarkingdog.tistory.com/943 ; 재귀)를 보다가 c++코드를 파이썬으로 바꿨는데 recursion error 가 자꾸 났다. 파이썬 재귀 깊이 제한때문이라고 생각을 해서 sys.setrecursionlimit() 으로 바꿔줬는데도 똑같이 에러가 나서 아예 재귀를 빼버렸다. ..
KING받음
반응형
'Programming > Python' 카테고리의 다른 글
[Python3] 복잡한 조립라인2 - Softeer(LEVEL5) (0) | 2023.08.08 |
---|---|
[Python3] 전광판 - Softeer(LEVEL2) (0) | 2023.08.08 |
[Python3] GBC - Softeer(LEVEL2) (1) | 2023.08.05 |
[Python3] 성적 평가 - Softeer(LEVEL3) (시간복잡도 해결 버전) (0) | 2023.08.05 |
[Python3] 성적 평가 - Softeer(LEVEL3) (틀린버전) (0) | 2023.08.05 |