时间复杂度O(longn)
往往搭配模运算食用,快速而且可以防止爆long long
1 #include<iostream>
2 using namespace std;
3 long long s;
4 long long b, p, k;
5 long long qpow(long long x, long long y)
6 {
7 x = x % k;
8 if (y == 0)
9 return 1;
10 if (y == 1)
11 return x;
12 else
13 {
14 if (y % 2 == 0)
15 {
16 x = x % k;
17 return qpow(x * x, y / 2) % k;
18 }
19 if (y % 2 != 0)
20 {
21 x = x % k;
22 return x * qpow(x * x, y / 2) % k;
23 }
24 }
25 return 0;
26 }
27 int main()
28 {
29 cin >> b >> p >> k;
30 s = b % k;
31 s = qpow(s, p) % k;
32 cout << b << "^" << p << " mod " << k << "=" << s << endl;
33 return 0;
34 }