$O(p+\log_pn)$ 计算 ${n\choose m}\bmod p$ 的算法,$p$ 为素数。
$${p\choose i}=\frac pi{p-1\choose i-1}$$
于是对 $1\le i\le p-1$,有 ${p\choose i}\equiv 0\pmod p$。
$$(1+x)^p\equiv {p\choose 0}+{p\choose 1}x+\cdots +{p\choose p}x^p\equiv 1+x^p\pmod p$$
对 ${n\choose m}$,不妨设 $n=k_1p+r_1,m=k_2p+r_2$,于是有
$$(1+x)^n\equiv (1+x)^{k_1p+r_1}\equiv ((1+x)^p)^{k_1}(1+x)^{r_1}\equiv (1+x^p)^{k_1}(1+x)^{r_1}\pmod p$$
对比左右两边 $x_m$ 的系数,有
$${n\choose m}\equiv {k_1\choose k_2}{r_1\choose r_2}\pmod p$$
于是递归处理,有
$$\text{Lucas}(n,m)\equiv \text{Lucas}(\lfloor \frac np\rfloor,\lfloor \frac mp\rfloor){n\bmod p\choose m\bmod p}$$
$O(\sum p_i^k+\sum \log_{p_i^k}n)$ 计算 ${n\choose m}\bmod p$ 的算法,其中 $p=\prod p_i^k$。