1 /*
2 快速幂模版
3 求x^t%mod
4 时间复杂度:O(logn)
5 注:递归可能爆栈
6 原理:x^t = (x^(t/2))^2 + x^(n%2);
7 */
8 #include <iostream>
9 using namespace std;
10 long long quick_pow(long long x, long long t, long long mod)
11 {
12 if(t == 0) return 1;
13 long long temp = quick_pow(x, t / 2, mod);
14 temp = temp * temp % mod;
15 if(t % 2 == 1) temp = temp * x % mod;
16 return temp;
17 }
18 long long quick_pow2(long long x, long long t, long long mod)
19 {
20 long long ret = 1;
21 while(t)
22 {
23 if(t % 2)ret = ret * x % mod;
24 x = x * x % mod;
25 t >>= 1;
26 }
27 return ret;
28 }
29 int main()
30 {
31 long long x, t, mod;
32 cin >> x >> t >> mod;
33 cout << quick_pow(x, t, mod) << endl;
34 cout << quick_pow2(x, t, mod) << endl;
35 return 0;
36 }