难度:2
快速幂,时间复杂度log2b,求a的b次方对p取余,将b展开成2进制完成的,还有如何取b二进制下最低位,以及递推公式,
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pa;
int solve(int a, int b, int p) {
int ans = 1;
while (b) {
if (b & 1) ans = (ll) ans * a % p;
a = (ll) a * a % p;
b /= 2;
}
if (p != 1) return ans;
else return 0;
}
int main() {
int a, b, p;
cin >> a >> b >> p;
cout << a << '^' << b << " mod " << p << '=' << solve(a, b, p);
return 0;
}