快速乘/规避溢出

洛谷最短路题的讨论中看到的,学习了一下。计算(xy mod p)

long long quick_mul(long long x,long long y,long long p)
{
    if (y==0) return 0;
    if (y==1) return x%p;
    long long re;
    re=quick_mul(x,y>>1,p);
    if ((y&1)==1) return (re+re+x)%p;
             else return (re+re)%p;
}

思想就是(ab = 2*(afrac{b}{2}))

如果动机不是规避溢出的话,把取模去掉,会快很多。

原文地址:https://www.cnblogs.com/jt2001/p/6129914.html