Lucas(卢卡斯)定理
Lucas定理,是用来快速求解一个组合数对于一个数(保证这一个数是质数)的模。
那么,我们先来看Lucas定理的求解式:
\(\binom{n}{m}\%p\)(\(p\)是质数)
这样的一个式子,在\(n,m\leq 10^9\)的时候很容易炸掉,那么我们就要对它利用\(p\)进行化简求值 。
那么,我们可以将\(n,m\)用另一种形式处理(可以考虑成将\(n,m\)用\(p\)进制表示)
\(n=n_k\cdot p^k + n_{k-1}\cdot p^{k-1} + \cdots + n_1\cdot p + n_0\)
\(m=m_k\cdot p^k + m_{k-1}\cdot p^{k-1} + \cdots + m_1\cdot p + m_0\)
那么,\(\binom{n}{m}\equiv\binom{n_k}{m_k}\binom{n_{k-1}}{m_{k-1}}\cdots\binom{n_0}{m_0}\ (mod\ p)\)
是不是看起来很累啊,我们换一种方法\(\binom{n}{m}\equiv\prod_{i=0}^{k}\binom{n_i}{m_i} \ (mod\ p)\)
(p是质数就不写了哈,反正所有的p都是质数)
我们接下来证明:(不喜欢看这一段的同学直接看代码啦)
令\(n=a\cdot p+b,m=c\cdot p+d\)
\(\therefore a=\left \lfloor \frac{n}{p} \right \rfloor,b=\left \lfloor \frac{m}{p} \right \rfloor\)
引理1:$(1+x)^p \equiv 1+x^p \pmod{p} $
证明:
$(1+x)^p \equiv 1+x \pmod{p} $
\(x^p \equiv x \pmod{p}\)
\(1+x^p \equiv 1+x \pmod{p}\)
\(\therefore (1+x)^p \equiv 1+x^p \pmod{p}\)
证毕
\((1+x)^n=(1+x)^{\left \lfloor \frac{n}{p} \right \rfloor \cdot p}\cdot (1+x)^b \equiv (1+x^p)^{\left \lfloor \frac{n}{p} \right \rfloor}\cdot (1+x)^b\)
此处引入二项式定理:\((1+x)^n=\sum_{i=0}^{n}\binom{n}{i}\cdot x^i\)
\(\therefore (1+x^p)^{\left \lfloor \frac{n}{p} \right \rfloor}\cdot (1+x)^b=\sum_{i=0}^{a}\binom{a}{i}x^{p\cdot i}\cdot \sum_{j=0}^{b}\binom{b}{j}x^j\)
\((1+x)^n=\sum_{m=0}^{n}\binom{n}{m}x^m\)
\(\sum_{i=0}^{a}\binom{a}{i}x^{p\cdot i}\cdot \sum_{j=0}^{b}\binom{b}{j}x^j=\sum_{pi+j \leq m且j<p}\binom{a}{i}\binom{b}{j}x^{pi+j}\)
\(\because pi+j=m\)
\(\therefore \binom{a}{i}\binom{b}{j}=\binom{n}{m}\)
接下来迭代证明即可。
那么代码实现也十分简单。
【模板】卢卡斯定理
板子题,直接上板子:
#include <cstdio>
#define Maxn 100000
int n,m,p;
int inv[Maxn+5];
int a[Maxn+5];
int ksm(int x,int y){int ans=1;while(y){if(y&1){ans=(int)((long long)ans*x%p);}y>>=1;x=(int)((long long)x*x%p);}return ans;
}//求逆元
int C(int x,int y){if(y>x){return 0;}return (int)(1ll*a[x]%p*ksm(a[y],p-2)%p*ksm(a[x-y],p-2)%p);
}//求组合数
int lucas(int x,int y){if(y==0){return 1;}return (int)(lucas(x/p,y/p)*1ll*C(x%p,y%p)%p);
}//lucas,用递归实现极为简单
int main(){int t;scanf("%d",&t);while(t--){scanf("%d%d%d",&n,&m,&p);a[0]=1;for(int i=1;i<=p;i++){a[i]=(int)(a[i-1]*1ll*i%p);}//预处理printf("%d\n",lucas(n+m,n));}return 0;
}
转载于:https://www.cnblogs.com/withhope/p/10385620.html
Lucas(卢卡斯)定理相关推荐
- 教你一波Lucas(卢卡斯)定理在数论解题中的应用
首先,Lucas(卢卡斯)定理是什么?有什么用? Lucas定理是用来求 C(n,m) mod p,p为素数的值.(注意:p一定是素数) 有人会想,C(n,m)不能用C(n, m) = C(n - 1 ...
- 卢卡斯定理扩展卢卡斯
卢卡斯定理&扩展卢卡斯 Lucas EXlucas 例题 Lucas 卢卡斯定理: ( m n ) = ( m p n p ) ∗ ( m ( m o d p ) n ( m o d p ) ...
- 数论-卢卡斯定理(lucas)与拓展卢卡斯定理 (exlucas)
卢卡斯定理(lucas) [用途] 求解 C n m % p C_{n}^{m}\% p Cnm%p,其中m,n较大,p较小且为素数 [结论] C n m ≡ C n / p m / p C n % ...
- 卢卡斯定理(Lucas)
卢卡斯定理(Lucas) 证明如下: 结论: 卢卡斯定理的时间复杂度是plogN 代码如下: #include<iostream> using namespace std;int n; ...
- 【luogu P3807】【模板】卢卡斯定理/Lucas 定理(含 Lucas 定理证明)
[模板]卢卡斯定理/Lucas 定理 题目链接:luogu P3807 题目大意 求 C(n,n+m)%p 的值. p 保证是质数. 思路 Lucas 定理内容 对于非负整数 nnn,mmm,质数 p ...
- 洛谷——P3807 【模板】卢卡斯定理
P3807 [模板]卢卡斯定理 洛谷智推模板题,qwq,还是太弱啦,组合数基础模板题还没做过... 给定n,m,p($1\le n,m,p\le 10^5$) 求 $C_{n+m}^{m}\ mod\ ...
- 卢卡斯定理及其卢卡斯定理的拓展
前言: 求一个组合数 ,我们可以通过逆元的方式在 O(n)的时间复杂度内求出 但如果数特别大时(数据范围 ),又该怎么办 使用卢卡斯定理求解 卢卡斯定理:(组合数取模,取模的模数只能是质数) 即 模 ...
- 数学--数论--HDU 4675 GCD of Sequence(莫比乌斯反演+卢卡斯定理求组合数+乘法逆元+快速幂取模)
先放知识点: 莫比乌斯反演 卢卡斯定理求组合数 乘法逆元 快速幂取模 GCD of Sequence Alice is playing a game with Bob. Alice shows N i ...
- 『数学』--数论--组合数+卢卡斯定理+扩展卢卡斯定理
组合数: 在N个数中选取M个数,问选的方式有几种? 直接递归暴力简单 #include<cstdio> const int N = 2000 + 5; const int MOD = (i ...
- Saving Beans HDU - 3037(卢卡斯定理)
Saving Beans HDU - 3037(卢卡斯定理) 题意: 他们想知道有多少种方法可以在n树中保存不超过m个bean(它们是相同的). 现在他们求助于你,你应该给他们答案. 结果可能非常巨大 ...
最新文章
- Scrumban-拉动企业渐进式变革的利器
- jenkins~管道Pipeline里使用公用类库
- 揭秘微信「扫一扫」识物为什么这么快?
- 三年java经验应该会什么?
- 本地项目推送到码云私有仓库
- JBuilder配置JBoss
- Flink系列-实时数仓之Flink实时写入ClickHouse并实时大屏Tableau
- Spring构建微服务
- java自动类型提升_Java中的基本数据类型转换(自动、强制、提升)
- xshell安装mysql步骤_xshell怎么搭建mysql
- ym——物联网入口之中的一个Android蓝牙4.0
- C++常用基础函数整理
- sklearn svm 调参_用 Grid Search 对 SVM 进行调参
- 光伏并网matlab,基于MATLAB的光伏并网设计
- RabbitMQ的消息确认、消息持久化
- R语言生存分析之COX比例风险模型构建及亚组森林图绘制示例
- QT QFileDialog文件对话框
- 你小子代码写成这样,老夫也无可奈何
- 初识云计算和DevOps
- YourBatman表白了,在Java 27岁生日这天
热门文章
- linux下的mongodb数据库原生操作
- Codevs 3342 绿色通道
- 理解 PHP output buffer
- Asp.net高效导出excel篇之Aspose导出excel
- Oracle 的 Sql*Plus 常用命令介绍
- Promise机制(持续更新中)
- html中h标签可包含a标签,HTML中H标签P标签(Paragraph)img标签(image)a标签(anchor)
- 失败原因【object object】_使用前端框架Vue的原因!
- 为什么有些程序员是三、四台电脑一起用的?
- AI 是否会取代计算机程序员