快速幂取模(当数很大时,相乘long long也会超出的解决办法)
Posted Roni
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速幂取模(当数很大时,相乘long long也会超出的解决办法)相关的知识,希望对你有一定的参考价值。
当几个数连续乘最后取模时,可以将每个数字先取模,最后再取模,即%对于*具有结合律。但是如果当用来取模的数本身就很大,采取上述方法就不行了。这个时候可以借鉴快速幂取模的方法,来达到大数相乘取模的效果。
LL mul(LL a,LL b)
{
LL ans=0;
while(b)
{
if(b&1) ans=(ans+a)%p;
a=(a+a)%p;
b=b>>1;
}
return ans;
}
LL Pow(LL a,LL b)
{
LL result=1;
LL base=a%p;
while(b)
{
if(b&1) result=mul(result,base)%p;
base=mul(base,base)%p;
b=b>>1;
}
return result;
}
以上是关于快速幂取模(当数很大时,相乘long long也会超出的解决办法)的主要内容,如果未能解决你的问题,请参考以下文章