快速模取幂
时间复杂度O(logb)
#include <iostream>
using namespace std;
typedef long long ll;
int q(int a, int b, int p)
{
int res=1 % p; #排除p是1的可能性
while (b)
{
if (b & 1)#若化为二进制后,b的最后一位是1,则进行下面这一步
res = (ll)res *a % p;
a = (ll)a * a % p;
b >>= 1;
}
return res;
}
int main()
{
int a, b, p;
cin >> a >> b >>p;
cout << q(a, b, p) << endl;
return 0;
}
注意此处a,b,p他们分别的取值范围。