lucas定理 +证明 学习笔记

lucas定理

p为素数

[dbinom n mequivdbinom {n\%p} {m\%p} dbinom {n/p}{m/p}(mod p) ]

左边一项直接求,右边可递归处理,不包含求组合数复杂度是(log_p(m))

证明

我们记(n=sp+q,m=tp+r,(q,r<p))

[dbinom {sp+q} {tp+r} equiv dbinom {s} {t} dbinom {q} {r} (mod p) ]

有这么一个性质(inom p dequiv0,0<d<p)

我们考虑使用幂来检验
利用扰动法(算两次)的思想

[egin{aligned} (1+x)^n&equiv(1+x)^q*[(1+x)^p]^s (mod p)\ &equiv(1+x)^q*[sum_{t=0}^p inom p i x^i]^s(mod p)\ 根据上面的那个性质\ &equiv(1+x)^q*(1+x^p)^s(mod p)\ &equivsum_{i=0}^s inom s i x^{pt} * sum_{j=0}^qinom q j x^j(mod p)\ 则有\ (1+x)^{sp+q}&equivsum_{i=0}^s inom s i x^{pt} * sum_{j=0}^qinom q j x^j(mod p)\ sum_{k=0}^{sp+q}inom {sp+q} {k} x^k&equivsum_{i=0}^s inom s i x^{pt} * sum_{j=0}^qinom q j x^j(mod p)\ 左边x^{tp+r}的系数为inom {sp+q}{tp+r}&\ 右边x^{tp+r}的系数为inom s tinom q r &(因为q<p)\ 系数在mod意义下相等\ 得证 end{aligned} ]

推广

利用(lucas)定理可以(O(p))预处理逆元+(O(log_p(n)))回答询问
那么p为合数呢?
1.如果p较小
方法1:
(O(p))预处理出(p)内的素数,共(frac P {ln P})
询问时扫一次素数
求出n,m,n-m中含有该素数多少个,求一个素数出现多少次要翻倍log次
复杂度(frac P {ln P}*log napprox n)
方法2:
将p分解质因数,每个lucas求一次,再用中国剩余定理
2.如果p较大:
有一篇FFT快速求n!的方法
布吉岛有没有用
先 挖坑

原文地址:https://www.cnblogs.com/acha/p/6443839.html