快速幂模板题。
容易发现, a b a^b ab 这个算式,当 b b b 是偶数的时候, a b = a b / 2 2 a^b = {a^{b/2}}^2 ab=ab/22,只需要求解 a b / 2 a^{b/2} ab/2 即可。
如果 b b b 是奇数,那么 $a^b = a b / 2 2 × a {a^{b/2}}^2\times a ab/22×a,特殊处理一下即可。
边界条件: b = 0 → 1 b=0\to 1 b=0→1。
如果模数为 1 1 1 需要特判,答案永远为 0 0 0。
时间复杂度 O ( log b ) O(\log b) O(logb)。
#include <bits/stdc++.h>
#define int long long
using namespace std;
int ksm(int a, int b, int c)
{
if (!b)
return 1 % c;
int ans = ksm(a, b >> 1, c);
ans = ans * ans % c;
if (b & 1)
ans = ans * a % c;
return ans;
}
signed main()
{
int a, b, p;
cin >> a >> b >> p;
cout << ksm(a, b, p) << '\n';
return 0;
}