1. 程式人生 > >快速冪取模(當數很大時,相乘long long也會超出的解決辦法)

快速冪取模(當數很大時,相乘long long也會超出的解決辦法)

結合 超出 但是 long 數字 也會 連續 return result

當幾個數連續乘最後取模時,可以將每個數字先取模,最後再取模,即%對於*具有結合律。但是如果當用來取模的數本身就很大,采取上述方法就不行了。這個時候可以借鑒快速冪取模的方法,來達到大數相乘取模的效果。

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也會超出的解決辦法)