卢卡斯定理证明
lucas定理一般用来解决如下问题:
Lucas 定理用于求解大组合数取模的问题,其中 p 必须为素数。正常的组合数运算可以通过递推公式求解(详见 排列组合 ),但当问题规模很大,而模数是一个不大的质数的时候,就不能简单地通过递推求解来得到答案,需要用到 Lucas 定理。
以上摘自oi wiki。
lucas定理内容如下:
其实也可以写为:
其中\(n_i,m_i\)分别为\(n,m\)拆分为\(p\)进制后,每一位对应的值。
接下来说一下定理内容的证明,给大家介绍一种生成函数的做法。
首先我们注意到有这样一个恒等式:
证明的话也不难:
注意到\(\displaystyle {p\choose n}=\frac{p!}{n!(p-n)!}\),在模\(p\)意义下,显然只有\(n=0\)或\(n=p\)时这个式子值大于\(0\),那么\(\displaystyle (1+x)^p=\sum_{n=0}^p{p\choose n}x^n=1+x^p\)。
同理,在模\(p\)意义下,可推广为\((a+b)^p\equiv a^p+b^p(mod\ p)\)。
上述式子通过数学归纳法还可以得出这样一个等式:
接下来证明就开始啦QAQ
我们首先有\(\displaystyle m=\sum_{i=0}^km_ip^i\),即将\(m\)在\(p\)进制下拆分。那么:
注意到后面括起来的部分可以看作一个多项式,那么上面整个式子都是若干个多项式的乘积。
现在我们从生成函数的角度思考,发现\(x\)的指数部分最后乘起来是一个这样的形式:\(\displaystyle \sum_{i=0}^k n_ip^i\),显然可以发现这为某个\(n\)的\(p\)进制分解。
那么考虑枚举最后得到的\(n\),就有:
上面的\(n_i\)为\(n\)的\(p\)进制分解中对应的数。
那么lucas定理的内容就证明完啦。
重要的是自信,一旦有了自信,人就会赢得一切。