组合数求法

一. 当n ,m<=2000时 直接结城预处理就好  C[i][j]=C[i-1][j]+f[i-1][j-1];

二.当需要取模是直接预处理阶乘和逆元打个函数求就好且mod足够大

fac[i]=fac[i-1]*i%mod;  inv[i]=(mod-mod/i)*inv[mod%i]%mod;

C[n][m]=fac[n]*inv[m]%mod*inv[n-m]%mod;

三. 当n.m >mod时 需要用Lucas

lucas(n,m,mod)=lucas(n%mod,m%mod,mod)*lucas(n/mod,m/mod,mod)%mod;

这时根据情况,个人认为一般要用到lucas的时候一般无法预处理,因为此时n.m足够大,空间装不下,这时候就单个求阶乘和逆元就好

逆元的话用费马小定理或者欧拉定理来求都可以。

posted @ 2019-10-18 10:19  Forever_goodboy  阅读(142)  评论(0编辑  收藏  举报