Skip to main content

快速幂

参考资料

快速幂

116 Bcpp
ll Pow(ll x,ll y)
{
x%=mod;
ll res=1;
while(y)
{
if(y&1)res=res*x%mod;
x=x*x%mod;
y>>=1;
}
return res;
}

龟速乘

龟速乘用于计算 x×ymodpx\times y\bmod p,可以防止直接计算 x×yx\times y 过大导致溢出。

120 Bcpp
ll mul(ll x,ll y)
{
x%=mod;
ll res=0;
while(y)
{
if(y&1)res=(res+x)%mod;
x=(x+x)%mod;
y>>=1;
}
return res;
}

另外两种实现:

55 Bcpp
ll mul(ll a,ll b,ll mod)
{
return __int128(a)*b%mod;
}

例题

给定三个整数 a,b,pa,b,p,求 abmodpa^b \bmod p。(a,b,p<231a,b,p<2^{31}