快速乘
定义:快速乘主要是解决乘法可能会爆的情况,快速乘原理就是利用了乘法分配来将ab转化为多个式子相加的形式求解,例如:2014=20(1110)2=20(23)*1+20*(22)1+20(21)*1+20*(20)*0=160+80+40=280;
上面即为快速乘的基本原理。
有两种时间度。
第一种快速幂时间度log(n);
inline ll mult_mod(ll a, ll b, ll m)
{
ll res = 0;
while(b){
if(b&1) res = (res+a)%m;
a = (a+a)%m;
b >>= 1;
}
return res;
}
第二种时间度为O1的快速乘
inline ll mult_mod(ll a, ll b, ll m)
{
ll c = a*b-(ll)((long double)a*b/m+0.5)*m;
return c<0 ? c+m : c; //就是算的a*b%m;
}
大概就是这样,代码较短,也比较容易记。