卢卡斯定理 学习笔记
引入
Lucas 定理用于求解大组合数取模的问题,其中模数必须为素数。正常的组合数运算可以通过递推公式求解,但当问题规模很大,而模数是一个不大的质数的时候,就不能简单地通过递推求解来得到答案,需要用到 Lucas 定理。
定义
Lucas 定理内容如下:对于质数 ,有
观察上述表达式,可知 和 一定是小于 的数,可以直接求解, 可以继续用 Lucas 定理求解。这也就要求 的范围不能够太大,一般在 左右。边界条件:当 的时候,返回 。
时间复杂度为 ,其中 为预处理组合数的复杂度, 为单次求组合数的复杂度。
证明
考虑 的取值,注意到 ,分子的质因子分解中 的次数恰好为 ,因此只有当 或 的时候 的质因子分解中含有 ,因此 。进而我们可以得出
注意过程中没有用到费马小定理,因此这一推导不仅适用于整数,亦适用于多项式。因此我们可以考虑二项式 的结果
考虑二项式 ,那么 就是求其在 次项的取值。使用上述引理,我们可以得到
注意前者只有在 的倍数位置才有取值,而后者最高次项为 ,因此这两部分的卷积在任何一个位置只有最多一种方式贡献取值,即在前者部分取 的倍数次项,后者部分取剩余项,即 。
exLucas 定理
Lucas 定理中对于模数 要求必须为素数,那么对于 不是素数的情况,就需要用到 exLucas 定理。