时间复杂度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 }