快速乘
输出一个整数,表示a*b mod p
的值。
数据范围
1≤a,b,p≤1018
ll qadd(ll a, ll b, ll p)
{
ll res = 0;
while (b)
{
if (b & 1) res = (res + a) % p;
a = (a + a) % p;
b >>= 1;
}
return res;
}
利用longlong取模溢出相抵消
ll mul(ll x,ll y,ll m){
x%=m;y%=m;
ll d=((long double )x*y/m);
d=x*y-d*m;
if(d>=m)d-=m;
if(d<0)d+=m;
return d;
}