두 개의 숫자 n과 m이 주어지면 무한 전력 타워를 평가하십시오.
n ^ (n + 1) ^ (n + 2) ^ (n + 3) ^ (n + 4) ^ ... mod m
^는 오른쪽 연관임을 명심하십시오. 따라서 2 ^ 3 ^ 4 = 2 ^ (3 ^ 4)입니다. 이제 어떻게 오른쪽 연관 연산자의 무한 시퀀스에 값을 할당 할 수 있습니까?
무한 전력 타워의 첫 번째 i 항을 포함하는 전력 타워로 f (n, m, i)를 정의하십시오. 그런 다음 모든 i> C, f (n, m, i) = f (n, m, C)에 대해 일정한 C가 있습니다. 따라서 무한 전력 타워가 특정 값으로 수렴한다고 말할 수 있습니다. 우리는 그 가치에 관심이 있습니다.
귀하의 프로그램은 합리적인 최신 PC에서 10 초 이내에 n = 2017, m = 10 ^ 10을 계산할 수 있어야합니다. 즉, 실제 알고리즘을 구현해야하며 무차별 처리하지 않아야합니다.
프로그래밍 언어의 숫자 제한에 대해 n <2 30 및 m <2 50 이라고 가정 할 수 있지만 알고리즘은 이론적으로 모든 크기 n , m에서 작동해야합니다 . 프로그램이 그러나 한다 이 크기 한도 내에서 입력에 대한 정확, 중간 값 오버 플로우가되어 있지 입력이이 범위의 경우 면제.
예 :
2, 10^15
566088170340352
4, 3^20
4
32, 524287
16
n및m되어 있지 공동 프라임 보장.