Diberi dua angka n dan m, evaluasi menara listrik tanpa batas:
n ^ (n + 1) ^ (n + 2) ^ (n + 3) ^ (n + 4) ^ ... mod m
Perlu diingat bahwa ^ asosiatif-benar. Jadi 2 ^ 3 ^ 4 = 2 ^ (3 ^ 4). Sekarang bagaimana Anda bisa menetapkan nilai ke urutan tak terbatas operator asosiasi kanan?
Tentukan f (n, m, i) sebagai menara listrik yang berisi syarat-syarat i pertama dari menara listrik tanpa batas. Lalu ada beberapa konstanta C sehingga untuk setiap i> C, f (n, m, i) = f (n, m, C). Jadi Anda bisa mengatakan menara listrik tak terbatas berkumpul pada nilai tertentu. Kami tertarik dengan nilai itu.
Program Anda harus dapat menghitung n = 2017, m = 10 ^ 10 dalam waktu kurang dari 10 detik pada PC modern yang wajar. Artinya, Anda harus menerapkan algoritma yang sebenarnya, tanpa bruteforcing.
Anda dapat mengasumsikan bahwa n <2 30 dan m <2 50 untuk batas numerik dalam bahasa pemrograman Anda, tetapi algoritma Anda harus secara teoritis bekerja untuk ukuran apa pun n , m . Namun program Anda harus benar untuk input dalam batas ukuran ini, kelebihan nilai menengah tidak dimaafkan jika input berada dalam batas ini.
Contoh:
2, 10^15
566088170340352
4, 3^20
4
32, 524287
16
n
danm
yang tidak dijamin akan co-prime.