卢卡斯定理/Lucas 定理

引入

求 \(C_{n+m}^n \mod p\)。

\(n,m,p \leq 10^5\)。

如果直接用阶乘求,可能在阶乘过程中出现了 \(p\),而最后的结果没有出现 \(p\),导致错误。

有两种解决方法:

1.求组合数时提前把 \(p\) 的质因子除掉。

2.Lucas 定理。

所以 Lucas 定理用于处理模数较小且为质数的情况下,求组合数的问题。

定理推导

先放结论:

\[C_a^b \equiv C_{\lfloor \frac{a}{p} \rfloor}^{\lfloor \frac{b}{p} \rfloor} \cdot C_{a \mod p}^{b \mod p} \mod p
\]

先证明 \(C_p^i \equiv \frac{p}{i}C_{p-1}^{i-1} \equiv 0 \mod p\)。

\[C_p^i=\frac{p!}{i!(p-i)!}=\frac{p}{i} \cdot \frac{(p-1)!}{(i-1)!(p-i)!}=\frac{p}{i}C_{p-1}^{i-1}
\]

得证。

考虑二项式定理,易得:

\[(1+x)^p \equiv C_p^0+C_{p}^1x+C_{p}^2x^2+\cdots+C_p^px^p \equiv 1+x^p \mod p
\]

Ps:除去 \(C_p^p=1\) 以外,其他的项都被模为 \(0\)。

此时,令 \(a=lp+r,b=sp+j\)。

求证 \(C_a^b \equiv C_l^s\cdot C_r^j \mod p\)。

接着剥削二项式

\[(1+x)^a=(1+x)^{lp}(1+x)^r
\]

展开 \((1+x)^{lp}\)

\[(1+x)^{lp} \equiv ((1+x)^p)^l \equiv (1+x^p)^l \mod p
\]
\[\therefore (1+x)^a \equiv (1+x^p)^l(1+x)^r \mod p
\]

通过上式,观察 \(x^b\) 项。

\[\because C_a^b x^b \equiv C_l^sx^{sp}\cdot C_r^jx^j \mod p \\
\therefore C_a^b x^b \equiv C_l^sC_r^jx^b \mod p \\
\therefore C_a^b \equiv C_{\lfloor \frac{a}{p} \rfloor}^{\lfloor \frac{b}{p} \rfloor} \cdot C_{a \mod p}^{b \mod p} \mod p
\]

Ps:左边是直接二项式的 \(x^b\) 项,右边是二项式 \((1+x^p)^l\) 的 \(x^{sp}\) 和 \((1+x)^r\) 的 \(x^j\) 项。

卢卡斯定理/Lucas 定理的更多相关文章

  1. 【luogu P3807】【模板】卢卡斯定理/Lucas 定理(含 Lucas 定理证明)

    [模板]卢卡斯定理/Lucas 定理 题目链接:luogu P3807 题目大意 求 C(n,n+m)%p 的值. p 保证是质数. 思路 Lucas 定理内容 对于非负整数 \(n\),\(m\), ...

  2. 【bzoj1951】[Sdoi2010]古代猪文 费马小定理+Lucas定理+中国剩余定理

    题目描述 求  $g^{\sum\limits_{k|n}C_{n}^{\frac nk}}\mod 999911659$ 输入 有且仅有一行:两个数N.G,用一个空格分开. 输出 有且仅有一行:一个 ...

  3. BZOJ1951 [Sdoi2010]古代猪文 【费马小定理 + Lucas定理 + 中国剩余定理 + 逆元递推 + 扩展欧几里得】

    题目 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久很久以前,在山的那 ...

  4. [bzoj1951] [Sdoi2010]古代猪文 费马小定理+Lucas定理+CRT

    Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...

  5. [模板] 数学基础:快速幂/乘/逆元/exGCD/(ex)CRT/(ex)Lucas定理

    方便复制 快速乘/幂 时间复杂度 \(O(\log n)\). ll nmod; //快速乘 ll qmul(ll a,ll b){ ll l=a*(b>>hb)%nmod*(1ll< ...

  6. [笔记] 扩展Lucas定理

    [笔记] 扩展\(Lucas\)定理 \(Lucas\)定理:\(\binom{n}{m} \equiv \binom{n/P}{m/P} \binom{n \% P}{m \% P}\pmod{P} ...

  7. Lucas定理——定义、证明、实现、运用

    目录 什么是Lucas定理 证明Lucas定理 Lucas定理求解组合数的C++实现 什么是Lucas定理 这是一个有助于分解组合数来求解的定理,适合模数小,数字大的问题. 有质数 \(p\),对于\ ...

  8. 卢卡斯定理 Lucas (p为素数)

    证明摘自:(我网上唯一看得懂的证明) https://blog.csdn.net/alan_cty/article/details/54318369 结论:(显然递归实现)lucas(n,m)=luc ...

  9. 卢卡斯定理Lucas

    卢卡斯定理Lucas 在数论中,\(Lucas\)定理用于快速计算\(C^m_n ~ \% ~p\),即证明\(C^m_n = \prod_{i = 0} ^kC^{m_i}_{n_i}\)其中\(m ...

  10. 洛谷.3807.[模板]卢卡斯定理(Lucas)

    题目链接 Lucas定理 日常水题...sublime和C++字体死活不同步怎么办... //想错int范围了...不要被longlong坑 //这个范围现算阶乘比预处理快得多 #include &l ...

随机推荐

  1. 运行 Java 程序

    Java 程序实际上就是我们编译好的 Java 类文件.运行 Java 程序就是运行 Java 类的 main 函数. 编译并运行 Java 文件 源文件: package com.example; ...

  2. 如何选择 Linux 发行版

    简介 要建立云服务器,首先需要安装操作系统.在现代环境中,几乎所有情况下都是指 Linux 操作系统.从历史上看,Windows 服务器和其他类型的 Unix 在特定的商业环境中都很流行,但现在几乎每 ...

  3. 反转字符串II(541)

    题目描述 给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符. 如果剩余字符少于 k 个,则将剩余字符全部反转. 如果剩余字符小于 2 ...

  4. python pyqt6 QComboBox 圆角边框

    圆角边框周围显示黑色直角 QComboBox  新增 如下设定即可 xxx_source.view().window().setWindowFlag(Qt.WindowType.NoDropShado ...

  5. Spring:基于注解管理bean

    标记与扫描 注解 和 XML 配置文件一样,注解本身并不能执行,注解本身仅仅只是做一个标记,具体的功能是框架检测 到注解标记的位置,然后针对这个位置按照注解标记的功能来执行具体操作. 本质上:所有一切 ...

  6. VS2019 查看源码,使用F12查看源码

    前几天在微软社区看到VS的功能演示时,偶然看到此功能,对于开发人员来说太有用了,特此记录分享出来希望可以帮助到家. 具体设置步骤,打开vs2019,在工具>选项>文本编辑器>c#&g ...

  7. Angular 18+ 高级教程 – HttpClient

    前言 HttpClient 是 Angular 对 XMLHttpRequest 和 Fetch 的封装. HttpClient 的 DX (Developer Experience) 比 XMLHt ...

  8. JavaScript – Web Worker

    前言 在上一篇 << 单线程 与 执行机制 >> 中, 我们提到了 Web Worker. 它的诞生是为了解决 JS 主线程执行耗时计算时, 导致 UI 无法及时更新的卡死现象 ...

  9. 线段树 ----洛谷p3372

    问题描述: 已知一个数列,对数列进行两种操作:1,对数列某个区间中的所有数加d:2,查询数列某区间的区间和 输入: 第一行输入两个整数n和m,分别代表数列中元素个数和对数列的操作次数,第二行输入n个用 ...

  10. 《Vue.js 设计与实现》读书笔记 - 第8章、挂载与更新

    第8章.挂载与更新 8.1 挂载子节点和元素的属性 扩展子元素的类型可以为数组,并判断如果是数组的话,就先依次挂载所有的子元素. 同时新增节点属性.属性可以通过 el.setAttribute 添加到 ...