Skip to content

卢卡斯定理 学习笔记

引入

Lucas 定理用于求解大组合数取模的问题,其中模数必须为素数。正常的组合数运算可以通过递推公式求解,但当问题规模很大,而模数是一个不大的质数的时候,就不能简单地通过递推求解来得到答案,需要用到 Lucas 定理。

定义

Lucas 定理内容如下:对于质数 ,有

观察上述表达式,可知 一定是小于 的数,可以直接求解, 可以继续用 Lucas 定理求解。这也就要求 的范围不能够太大,一般在 左右。边界条件:当 的时候,返回

时间复杂度为 ,其中 为预处理组合数的复杂度, 为单次求组合数的复杂度。

证明

考虑 的取值,注意到 ,分子的质因子分解中 的次数恰好为 ,因此只有当 的时候 的质因子分解中含有 ,因此 。进而我们可以得出

注意过程中没有用到费马小定理,因此这一推导不仅适用于整数,亦适用于多项式。因此我们可以考虑二项式 的结果

考虑二项式 ,那么 就是求其在 次项的取值。使用上述引理,我们可以得到

注意前者只有在 的倍数位置才有取值,而后者最高次项为 ,因此这两部分的卷积在任何一个位置只有最多一种方式贡献取值,即在前者部分取 的倍数次项,后者部分取剩余项,即

exLucas 定理

Lucas 定理中对于模数 要求必须为素数,那么对于 不是素数的情况,就需要用到 exLucas 定理。