mod를 const로 선언해주면 통과합니다.
이유는 나누기 연산은 프로세서가 처리하는 모든 연산 중 가장 느린 것에 속하기 때문입니다. mod가 const가 아닌 경우, 컴파일러는 그 느린 나누기 명령을 그대로 수행하도록 코드를 만들 수밖에 없습니다. 하지만 const로 선언된 경우, 컴파일러는 나누기 명령을 만들어내는 대신 같은 결과를 내는 다른 연산(비트 연산이나 덧셈, 곱셈 등)들을 조합하여 훨씬 빠르게 연산을 수행하도록 만들 수 있게 됩니다.
swj0324 1년 전 1
n의 최대 입력값이 10^18 <= 2^60 이고, m의 최대 입력값이 100이면
분할 정복을 이용한 matrix_pow에서 mul 이 호출될 수 있는 최대 횟수는
대략 n이 이진수로 11......11인 경우 120번 정도이고
mul 한번 호출당 100^3 = 10^6 이니까
120 * 백만 = 1.2억 이니
제한 시간 3초안에 돌아가야 하는것 아닌가요?
제가 뭘 간과 했을까요...?