费马小定理:
在p是素数的情况下 a^p≡a(modp),对式子变形得:a^(p-1)≡1(modp),那么a的逆元inv[a] = a^(p-2)。
组合数C(m,n) = m! / (n! * (m-n)!),当C(m,n)特别大的时候,需要对p取余,若p是素数,那么可以利用费马小定理快速求逆元。
C(m,n) % p = (m! / (n! * (m-n)!))%p = (m! / (m-n)! * inv[n!])%p
m! / (m-n)! * inv[n!]可以O(n)实现,代码如下
LL C(LL m,LL n) { LL ans = 1; for(LL i=1;i<=n;i++) { ans = ans*(m-i+1)%mod*inv[i]%mod; } return ans; }