分析:
这道题属于快速幂类型的题,唯一棘手的是用常规的快速幂会爆long long,这时候对于没有大数的c++而言,要么用手写大数函数来做,要么就在快速幂的基础上,为防止溢出,将快速幂中的乘法拆成加法求余,类似快速幂的快速乘。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll QuickMul(ll a, ll b, ll mod)
{
ll base = a, res = 0;
while (b)
{
if (b % 2)res = (res + base) % mod;
base = base * 2 % mod;
b /= 2;
}
return res;
}
ll QuickPow(ll a, ll b, ll mod)
{
ll base = a, res = 1;
while (b)
{
if (b % 2)res = QuickMul(res, base, mod);
base = QuickMul(base, base, mod);
b /= 2;
}
return res;
}
int main()
{
int n;
scanf("%d", &n);
while (n--)
{
ll a, b, c;
scanf("%lld%lld%lld", &a, &b, &c);
printf("%lld\n", QuickPow(a, b, c));
}
return 0;
}