这道题是龟速乘
因为给的数太大了,会爆long long
#include<iostream>
using namespace std;
typedef long long ll;
ll pow_mul(ll a, ll b, ll mod) {
ll ans = 0;
while (b) {
if (b & 1) ans = (ans + a) % mod;
a = (a + a) % mod;
b >>= 1;
}
return ans;
}
ll pow_mod(ll a, ll b, ll mod) {
ll ans = 1;
while (b) {
if (b & 1) ans = pow_mul(ans, a, mod);
a = pow_mul(a, a, mod);
b >>= 1;
}
return ans;
}
int main() {
int T;cin >> T;
while (T--) {
ll a, b, p;
cin >> a >> b >> p;
cout << pow_mod(a, b, p) << endl;
}
return 0;
}
https://blog.nowcoder.net/n/2a0a42baba81483caf81c0534b793113?f=comment
至于这个龟速乘的原理,这里就不多说了
放上一篇dalao博客,以供参考