Lucas定理详解
这篇博客是从另一位园友那里存的,但是当时忘了写原文的地址,如果有找到原文地址的请评论联系!
Lucas定理解决的问题是组合数取模。数学上来说,就是求 \(\binom n m\mod p\)。(p为素数)
这里\(n,m\)可能很大,比如达到\(10^{15}\),而\(p\)在\(10^9\)以内。显然运用常规的阶乘方法无法直接求解,所以引入Lucas定理。
Lucas定理
把\(n\)和\(m\)写成\(p\)进制数的样子(如果长度不一样把短的补成长的那个的长度):
\(n=(a0a1…ak)p\)
\(m=(b0b1…bk)p\)
那么:
\(\binom n m \equiv \prod _{i=0}^k \binom {a_i} {b_i} \mod p\)
证明
如果把Lucas定理从递归的角度理解,它其实是这样的:
设\(n=ap+b,m=cp+d,(b,d<p,a=\lfloor\frac{n}{p}\rfloor,c=\lfloor \frac{m}{p}\rfloor) \\ \binom n m \equiv \binom a c * \binom b d\)
这个定理的一个很巧妙的证法是通过二项式定理来说明上面的式子是成立的。
首先,对于任意质数\(p\),有:
\((1+x)^p\equiv 1+x^p\mod p\)
其证明可以由费马小定理\((x^p \equiv x \mod p) |p为素数)\)直接得出:
\((1+x)^p\equiv 1+x\)
\(x^p\equiv x\)
所以\((1+x)^p\equiv 1+x \equiv 1+x^p\)
(当然同样也有\((a+b)^p\equiv a^p+b^p \mod p\),具体为什么你可以拆开前面的式子,将其除 \(a^p\) 和 \(b^p\) 项外的所有项的系数好好研究一下(其实就是杨辉三角的第p层),可以发现把对称项系数分别合并后都能整除\(p\))
利用这个性质,我们证明Lucas定理:
\(\begin{aligned} (1+x)^n&=(1+x)^{\lfloor \frac{n}{p}\rfloor *p}(1+x)^b \\ &=(1+x^p)^{\lfloor \frac{n}{p}\rfloor}(1+x)^b \\ &=\sum _{i=0}^k\binom {\lfloor \frac{n}{p}\rfloor} ix^{pi}\sum _{j=0}^k\binom b jx^j \end{aligned}\)
考察等式左右两边xmxm的系数,可以发现:
\(\begin{aligned} 左边&=\binom n m \\ 右边&=\binom {\lfloor \frac{n}{p}\rfloor} i\binom b j,(pi+j=m,j<p) \\ &=\binom {\lfloor \frac{n}{p}\rfloor} {\lfloor \frac{m}{p}\rfloor} \binom b d \end{aligned}\)
所以上面的式子成立,证明完毕。
如果不算预处理什么的,算法时间复杂度为\(O(log_pn)\)。如果能够支持预处理,那么就加一个\(O(p)\),要不就用快速幂,乘上\(O(logp)\)。
Lucas定理详解的更多相关文章
- pick定理详解
一.概念 假设P的内部有I(P)个格点,边界上有B(P)个格点,则P的面积A(P)为:A(P)=I(P)+B(P)/2-1. 二.说明 Pick定理主要是计算格点多边形(定点全是格点的不自交图形)P的 ...
- 几何:pick定理详解
一.概念 假设P的内部有I(P)个格点,边界上有B(P)个格点,则P的面积A(P)为:A(P)=I(P)+B(P)/2-1. 二.说明 Pick定理主要是计算格点多边形(定点全是格点的不自交图形)P的 ...
- POJ 1659 Frogs' Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】
Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 9897 Accepted: 41 ...
- (转载)--SG函数和SG定理【详解】
在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点 ...
- CF451E Devu and Flowers (隔板法 容斥原理 Lucas定理 求逆元)
Codeforces Round #258 (Div. 2) Devu and Flowers E. Devu and Flowers time limit per test 4 seconds me ...
- HDU3037 Saving Beans(Lucas定理+乘法逆元)
题目大概问小于等于m个的物品放到n个地方有几种方法. 即解这个n元一次方程的非负整数解的个数$x_1+x_2+x_3+\dots+x_n=y$,其中0<=y<=m. 这个方程的非负整数解个 ...
- 机器学习经典算法详解及Python实现--基于SMO的SVM分类器
原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector ...
- Lucas定理及其应用
Lucas定理这里有详细的证明. 其实就是针对n, m很大时,要求组合数C(n, m) % p, 一般来说如果p <= 10^5,那么就能很方便的将n,m转化为10^5以下这样就可以按照乘法逆元 ...
- Heapsort 堆排序算法详解(Java实现)
Heapsort (堆排序)是最经典的排序算法之一,在google或者百度中搜一下可以搜到很多非常详细的解析.同样好的排序算法还有quicksort(快速排序)和merge sort(归并排序),选择 ...
随机推荐
- 洛谷 P2922 [USACO08DEC]秘密消息Secret Message
题目描述 Bessie is leading the cows in an attempt to escape! To do this, the cows are sending secret bin ...
- ubuntu kylin 13.10 无法安装ia32-libs解决方案
1.安装 Synaptic 2.sudo apt-get install synaptic 3.进入synaptic ,设置->软件库 4.点击 其他软件->添加 5.输入“deb ht ...
- sublime text 3中emmet常用技巧
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Jordan 标准型定理
将学习到什么 就算两个矩阵有相同的特征多项式,它们也有可能不相似,那么如何判断两个矩阵是相似的?答案是它们有一样的 Jordan 标准型. Jordan 标准型定理 这节目的:证明每个复矩阵都与一 ...
- win7旗舰版下配置IIS服务器
选择上述的插件后,Windows 需要更新一段时间,并重启电脑 测试是否安装成功:http://localhost 注意:默认端口号是 80,不能和tomcat 的 80 端口同时重启 常 ...
- JAVA web项目转客户端(nativefier)
1.环境:windows 2.下载node.js 3.安装mode.js;记住安装目录 4.命令行进入安装目录 5.执行语句: npm install nativefier –g 进行安装 6.新建空 ...
- Dev-Cpp 5.11 c++编译器下载
Dev-Cpp 5.11 c++编译器下载地址: 链接: https://pan.baidu.com/s/1jHMAf1k 密码: i6nw
- 三:MySql数据库及连接
前言: 开发中团队使用一个MYSQL数据库,我们只需要知道怎么去连接这个已经存在的数据库即可,因此关于MYSQL数据库安装部分可以去Baidu,并不是主要关心的部分 学会在windows7下使用DOS ...
- CVS使用之:先update后commit
vcs在进行版本管理时: 1.如果添加新文件 cvs add directory_name/filename cvs commit directory_name/filename 2.如果修改文件 c ...
- perl学习之:肯定匹配和否定匹配
tr/ / / 替换操作符不支持正则表达式 也不具备双引号替换能力m/ / s/ / / 都支持正则表达式,并且可以提供或限制双引号替换能力 $string = "25abc8" ...