组合数奇偶性:(n & m) == m则为奇数,否则偶数
求
Cmn%pCnm%p
(1)n,m <= 1000, p <= 1e9
用递推式计算
(2)n, m <= 1e18, p <= 1e5 且p为素数
Lucas定理
LL quick_mod(LL x, LL n)
{
LL res= 1;
x %= p;
while(n)
{
if(n & 1)
res= res* x % p;
x = x * x % p;
n >>= 1
}
return res;
}
LL C(LL n, LL m)
{
if(m > n) return 0;
return F[n] * invF[m] % p * invF[n-m] % p;
}
LL Lucas(LL n, LL m)
{
if(m == 0) return 1;
return C(n % p, m % p) * Lucas(n / p, m / p) % p;
}
void init()
{
F[0] = 1; F[1] = 1;
for (int i = 2; i < maxn; ++i)
F[i] = F[i-1] * i % p;
invF[maxn - 1] = quick_mod(F[maxn-1], p-2);
for (int i = maxn - 2; i >= 0; ++i)
invF[i] = invF[i+1] * (i + 1) % p;
}