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(卢卡斯)定理相关推荐

  1. 教你一波Lucas(卢卡斯)定理在数论解题中的应用

    首先,Lucas(卢卡斯)定理是什么?有什么用? Lucas定理是用来求 C(n,m) mod p,p为素数的值.(注意:p一定是素数) 有人会想,C(n,m)不能用C(n, m) = C(n - 1 ...

  2. 卢卡斯定理扩展卢卡斯

    卢卡斯定理&扩展卢卡斯 Lucas EXlucas 例题 Lucas 卢卡斯定理: ( m n ) = ( m p n p ) ∗ ( m ( m o d p ) n ( m o d p ) ...

  3. 数论-卢卡斯定理(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 % ...

  4. 卢卡斯定理(Lucas)

    卢卡斯定理(Lucas) 证明如下: 结论: ​ 卢卡斯定理的时间复杂度是plogN 代码如下: #include<iostream> using namespace std;int n; ...

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

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

  6. 洛谷——P3807 【模板】卢卡斯定理

    P3807 [模板]卢卡斯定理 洛谷智推模板题,qwq,还是太弱啦,组合数基础模板题还没做过... 给定n,m,p($1\le n,m,p\le 10^5$) 求 $C_{n+m}^{m}\ mod\ ...

  7. 卢卡斯定理及其卢卡斯定理的拓展

    前言: 求一个组合数 ,我们可以通过逆元的方式在 O(n)的时间复杂度内求出 但如果数特别大时(数据范围 ),又该怎么办 使用卢卡斯定理求解 卢卡斯定理:(组合数取模,取模的模数只能是质数) 即  模 ...

  8. 数学--数论--HDU 4675 GCD of Sequence(莫比乌斯反演+卢卡斯定理求组合数+乘法逆元+快速幂取模)

    先放知识点: 莫比乌斯反演 卢卡斯定理求组合数 乘法逆元 快速幂取模 GCD of Sequence Alice is playing a game with Bob. Alice shows N i ...

  9. 『数学』--数论--组合数+卢卡斯定理+扩展卢卡斯定理

    组合数: 在N个数中选取M个数,问选的方式有几种? 直接递归暴力简单 #include<cstdio> const int N = 2000 + 5; const int MOD = (i ...

  10. Saving Beans HDU - 3037(卢卡斯定理)

    Saving Beans HDU - 3037(卢卡斯定理) 题意: 他们想知道有多少种方法可以在n树中保存不超过m个bean(它们是相同的). 现在他们求助于你,你应该给他们答案. 结果可能非常巨大 ...

最新文章

  1. Scrumban-拉动企业渐进式变革的利器
  2. jenkins~管道Pipeline里使用公用类库
  3. 揭秘微信「扫一扫」识物为什么这么快?
  4. 三年java经验应该会什么?
  5. 本地项目推送到码云私有仓库
  6. JBuilder配置JBoss
  7. Flink系列-实时数仓之Flink实时写入ClickHouse并实时大屏Tableau
  8. Spring构建微服务
  9. java自动类型提升_Java中的基本数据类型转换(自动、强制、提升)
  10. xshell安装mysql步骤_xshell怎么搭建mysql
  11. ym——物联网入口之中的一个Android蓝牙4.0
  12. C++常用基础函数整理
  13. sklearn svm 调参_用 Grid Search 对 SVM 进行调参
  14. 光伏并网matlab,基于MATLAB的光伏并网设计
  15. RabbitMQ的消息确认、消息持久化
  16. R语言生存分析之COX比例风险模型构建及亚组森林图绘制示例
  17. QT QFileDialog文件对话框
  18. 你小子代码写成这样,老夫也无可奈何
  19. 初识云计算和DevOps
  20. YourBatman表白了,在Java 27岁生日这天

热门文章

  1. linux下的mongodb数据库原生操作
  2. Codevs 3342 绿色通道
  3. 理解 PHP output buffer
  4. Asp.net高效导出excel篇之Aspose导出excel
  5. Oracle 的 Sql*Plus 常用命令介绍
  6. Promise机制(持续更新中)
  7. html中h标签可包含a标签,HTML中H标签P标签(Paragraph)img标签(image)a标签(anchor)
  8. 失败原因【object object】_使用前端框架Vue的原因!
  9. 为什么有些程序员是三、四台电脑一起用的?
  10. AI 是否会取代计算机程序员