求 a b a^b abmod c
感觉是二进制的应用之一;
比如求
4
13
4^{13}
413,我们可以把13转化为二进制1101
那原式就等于
4
∗
4
4
∗
4
8
4*4^{4}*4^8
4∗44∗48
附上代码
#define ll long long
ll mypow(ll a,ll b,ll mod)
{
ll res=1;
a%=mod;
while(b)
{
if(b&1) res=(res*a)%mod;
a=(a*a)%mod;
b>>=1;
}
return res;
}
时间复杂度log(n)
当a和b相乘可能会爆long long 时;
可以用相同的思路快乘
附上代码
#define ll long long
ll mul(ll a,ll b,ll mod)
{
ll res=0;
a%=mod;
while(b)
{
if(b&1) res=(res+a)%mod;
a=(a*2)%mod;
b>>1;
}
return 0;
}