位运算
快速幂
LL qmi(LL a,LL b,LL p)
{
LL res=1 % p; // 边界数据:123456,0,1,因为b=0,所以不会进入while循环,
// 若直接定义res=1,p有可能为1,然而任何数%1=0,所以要先模
while(b)
{
if(b & 1) res = res *a % p; // 直接定义为LL,防止溢出
a = a * a % p;
b >>= 1;
}
return res;
}
龟速加
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;
}