Biorąc pod uwagę dwie liczby ni am, oceń nieskończoną wieżę mocy:
n ^ (n + 1) ^ (n + 2) ^ (n + 3) ^ (n + 4) ^ ... mod m
Pamiętaj, że ^ ma właściwe skojarzenie. Więc 2 ^ 3 ^ 4 = 2 ^ (3 ^ 4). W jaki sposób możesz przypisać wartość nieskończonej sekwencji operatorów asocjacyjnych?
Zdefiniuj f (n, m, i) jako wieżę mocy zawierającą pierwsze terminy i nieskończonej wieży mocy. Następnie istnieje pewna stała C taka, że dla każdego i> C, f (n, m, i) = f (n, m, C). Można więc powiedzieć, że nieskończona wieża mocy zbiega się na pewnej wartości. Interesuje nas ta wartość.
Twój program musi być w stanie obliczyć n = 2017, m = 10 ^ 10 w mniej niż 10 sekund na rozsądnym nowoczesnym komputerze. Oznacza to, że powinieneś wdrożyć rzeczywisty algorytm, bez brutalnego forsowania.
Możesz założyć, że n <2 30 i m <2 50 dla ograniczeń liczbowych w twoim języku programowania, ale twój algorytm musi teoretycznie działać dla dowolnego rozmiaru n , m . Jednak twój program musi być poprawny dla danych wejściowych w tych granicach wielkości, przepełnienia wartości pośrednich nie są usprawiedliwione, jeśli dane wejściowe mieszczą się w tych granicach.
Przykłady:
2, 10^15
566088170340352
4, 3^20
4
32, 524287
16
n
im
są nie gwarancją CO-prime.