快速幂plus版(利用快速乘防止溢出)
作者:
acwing_陌路
,
2022-01-16 22:49:49
,
所有人可见
,
阅读 273
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
ll qmul(ll a,ll b,ll c)//快速乘防止溢出
{
ll res = 0;//快速乘原理与快速幂类似,只要把快速幂的 * 换成 + 即可
while(b)
{
if(b & 1) res = (res + a) % c;
b >>= 1;
a = (a + a) % c;
}
return res;
}
ll qpow(ll a,ll b,ll c)
{
ll res = 1;
while(b)
{
if(b & 1) res = qmul(res,a,c);
b >>= 1;
a = qmul(a,a,c);
}
return res;
}
int main()
{
ll a,b,c;
cin >> a >> b >> c;
cout << qpow(a,b,c) << endl;
return 0;
}