yjkim9591   1년 전

시간초과를 어떻게 해결해야 할까요?

b의 최대 범위가 2,147,483,647이니까  0.5초면 0.5억인 걸로 알고 있는데,
아래 루프에서는 최소 b번은 루프를 돌려야하는데

시간을 줄일만한 방법을 생각해보면
아래 루프를 7번줄에 a를 a^5로 바꾸고,6번줄에 b->b/5로 바꾸면 
a를 곱할때 범위가 longlongint를 넘어가서 안됩니다.

어떻게하면 시간복잡도를 더 줄일 수 있을까요?

seawon0808   1년 전

분할 정복을 이용한 거듭제곱에 대해서 검색해 보세요.

byeongkeunahn   1년 전

Exponentiation by squaring이라고 하는데 A^1 mod C, A^2 mod C, A^4 mod C, A^8 mod C, A^16 mod C, ...을 계산한 뒤 B의 이진법 표현에 따라 적절한 항을 선택하여 곱해주는 방법이 있습니다.

댓글을 작성하려면 로그인해야 합니다.