实际上是将指数不停二分,对应底数平方
即:2^10=(2^5)^2=(2*2^4)^2=(2*(2^2)^2)^2
可以看出,指数为偶数时,指数减半,底数平方。指数为奇数时指数减1,底数乘底数(一次方)
由于指数为奇数时需保留一次方底数,所以设置变量res
//求a ^b mod998244353
#include <iostream>
using namespace std;
#include <cstring>
#include <sstream>
const long long mode = 998244353;
long long qxp(long long base, long long pow)
{
long long res = 1;
while (pow > 0) {
if (pow % 2 == 0) {
pow = pow / 2;
base = (base * base) % mode;
}
else {
pow -= 1;
res = (res * base) % mode;
}
}
return res;
}
int main()
{
long long a, b;
cin >> a >> b;
cout << qxp(a, b) % mode;
}