卢卡斯Lucas定理

LUCAS\mathscr{LUCAS} LUCAS

内容

(nm)≡(⌊np⌋⌊mp⌋)⋅(nmodpmmodp)modp\binom{n}{m} \equiv \binom{\lfloor \frac{n}{p} \rfloor}{\lfloor \frac{m}{p} \rfloor} \cdot \binom{n \mod p}{m \mod p} \mod p (mn​)≡(⌊pm​⌋⌊pn​⌋​)⋅(mmodpnmodp​)modp

其中ppp为质数。

上式称为Lucas定理。

证明

生成函数(1+x)n(1+x)^n(1+x)n项xmx^{m}xm前的系数为(nm)\binom{n}{m}(mn​),因此

(1+x)n≡(1+x)p⌊np⌋(1+x)nmodpmodp(1+x)^n \equiv (1 + x)^{p \lfloor \frac{n}{p} \rfloor} (1 + x)^{n \mod p} \mod p (1+x)n≡(1+x)p⌊pn​⌋(1+x)nmodpmodp

多项式(1+x)pmodp(1 + x)^p \mod p(1+x)pmodp:

(1+x)p≡∑i=0p(pi)xi=1+xpmodp(1 + x)^p \equiv \sum_{i = 0}^{p}\binom{p}{i}x^i = 1 + x^p \mod p (1+x)p≡i=0∑p​(ip​)xi=1+xpmodp

此处考虑ppp是质数,式子(pi)\binom{p}{i}(ip​),当且仅当i=0i =0i=0或i=pi=pi=p的时候模为111。

故:

(1+xp)⌊np⌋(1+x)nmodpmodp(1 + x^p)^{\lfloor \frac{n}{p} \rfloor} (1 + x)^{n \mod p} \mod p (1+xp)⌊pn​⌋(1+x)nmodpmodp

那么卷积对xmx^mxm项的贡献只有当前项取ppp的倍数,后项取余数的时候才能取到,
因此:

(nm)≡(⌊np⌋⌊mp⌋)⋅(nmodpmmodp)modp\binom{n}{m} \equiv \binom{\lfloor \frac{n}{p} \rfloor}{\lfloor \frac{m}{p} \rfloor} \cdot \binom{n \mod p}{m \mod p} \mod p (mn​)≡(⌊pm​⌋⌊pn​⌋​)⋅(mmodpnmodp​)modp

证毕。

例题

P3807

预处理阶乘+费马小定理求逆元,Lucas定理的运用。

#include <bits/stdc++.h>using namespace std;typedef long long ll;#define FR freopen("in.txt", "r", stdin)
#define FW freopen("out1.txt", "w", stdout)#define MAXT 100010
#define INV(x) fpow(x, p - 2, p)ll fac[MAXT];ll fpow(ll a, ll e, ll p)
{ll ans = 1;a %= p;for (; e; e >>= 1, a = (a * a) % p){if (e & 1)ans = (ans * a) % p;}return ans;
}void prework(ll p)
{fac[0] = fac[1] = 1;for (ll i = 2; i <= p; i++){fac[i] = (fac[i - 1] * i) % p;}
}ll C(ll n, ll m, ll p)
{if (m > n)return 0;if (m == 0)return 1;return (((fac[n] * INV(fac[m])) % p) * INV(fac[n - m])) % p;
}ll lucas(ll n, ll m, ll p)
{if (m == 0)return 1;return (lucas(n / p, m / p, p) * C(n % p, m % p, p)) % p;
}int main()
{int t;scanf("%d", &t);while (t--){ll n, m, p;scanf("%lld %lld %lld", &n, &m, &p);prework(p);printf("%lld\n", lucas(n + m, n, p));}return 0;
}

卢卡斯Lucas定理相关推荐

  1. Lucas(卢卡斯)定理

    Lucas定理,是用来快速求解一个组合数对于一个数(保证这一个数是质数)的模. 那么,我们先来看Lucas定理的求解式: \(\binom{n}{m}\%p\)(\(p\)是质数) 这样的一个式子,在 ...

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

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

  3. Lucas(卢卡斯)定理 【数论】

    Lucas定理是用来求 c(n,m) mod p,p为素数的值. 表达式  C(n,m)%p=C(n/p,m/p)*C(n%p,m%p)%p 应用  大组合数求模 typedef long long ...

  4. [学习笔记]扩展LUCAS定理

    可以先做这个题[SDOI2010]古代猪文 此算法和LUCAS定理没有半毛钱关系. [模板]扩展卢卡斯 不保证P是质数. $C_n^m=\frac{n!}{m!(n-m)!}$ 麻烦的是分母. 如果互 ...

  5. Lucas定理扩展Lucas

    Lucas定理 求解 C n m m o d    p C_n^m\mod p Cnm​modp (p为素数) 蒟蒻不会证明,记着递推公式就好=_= L u c a s ( n , m ) = C ( ...

  6. lucas定理、拓展lucas定理学习小结

    lucas定理 正题 首先,这玩意就是下面这个式子: C m n % p = C m / p n / p ∗ C m % p n % p % p C_m^n\%p=C_{m/p}^{n/p}*C_{m ...

  7. Lucas 定理学习笔记

    Lucas 定理 Lucas 定理用于求解大组合数取模的问题,其中模数必须为素数.正常的组合数运算可以通过递推公式求解(详见排列组合),但当问题规模很大,而模数是一个不大的质数的时候,就不能简单地通过 ...

  8. 【排列组合】 组合(lucas定理)

    题目描述 给出组合数 C(n,m) 表示从 n 个元素中选出 m 个元素的方案数.例如 C(5,2)=10,C(4,2)=6.可是当 n,m 比较大的时候,C(n,m) 很大.于是 xiaobo 希望 ...

  9. 数论(Lucas定理) HDOJ 4349 Xiao Ming's Hope

    题目传送门 题意:求C (n,0),C (n,1),C (n,2)...C (n,n)中奇数的个数 分析:Lucas 定理:A.B是非负整数,p是质数.AB写成p进制:A=a[n]a[n-1]...a ...

  10. szucodeforce训练1081C组合数学lucas定理,div2 627的D dfs +剪枝优化,697D Puzzles{dfs序+概率}

    给你n个方格排成一行,有m种颜色,然后要把这n个方格分成k+1段,每段涂不同的颜色,问有多少种方法. 组合数学Lucas定理 排列组合问题,首先要在n-1个位置里面选出k个位置当作段与段的分割点,然后 ...

最新文章

  1. python logging模块使用_python logging模块使用
  2. 离线或在线加载pytorch、mmdetection预训练模型vgg、resnet、alexnet等
  3. c语言数字和字母排序,C# 数字和字母的混合排序
  4. SAP 产品部署方式及定价模型
  5. VS2019 产品密钥
  6. 确定权重的方法-主成分分析
  7. 《统计学》第八版贾俊平第三章课后答案Excel
  8. 如何新浪微博html5,新浪微博接入Html5游戏 注重轻量碎片化
  9. php请求传感器数据流通道号,一汽大众发动机数据流与通道号 匹配设定数据
  10. 「又报错了TAT」 编译器报错是什么原因error: lvalue required as left operand of assignment|
  11. RO、RW和ZI数据解析
  12. mysql Incorrect string value \xF0\x9F\x98\x84\xF0\x9F
  13. MacBook 谷歌插件打包
  14. 康奈尔大学计算机生物学是,康奈尔大学生物统计硕士介绍
  15. 华为运营商级路由器配置示例 | 公网IPv6 over SRv6 TE Policy
  16. 理解什么是DTO?什么是AutoMapper?
  17. Dom——隔行变色、分时显示问候语
  18. 【Sofice小司笔记】1 Java,包含java基础知识,集合,面向对象,反射,泛型等
  19. html只显示一句话_您所说的话:如何最大化多显示器设置
  20. ubuntu下的python的diango环境安装

热门文章

  1. 《艰难的制造》:4星。基本是关于制造业的报告文学。严重剧透。
  2. 互联网dmz区_服务器设置于DMZ区,DMZ区是什么意思?
  3. Eclipse中各种编码格式及设置
  4. 探探这只反语言暴力公益短片 提供了一个新视角
  5. 爬取Bilibili视频评论,并生成云词图
  6. 如何在eclipse中建立一个安卓工程
  7. Chrome更新89版本后,sessionStorage丢失a标签跳转丢失sessionStorage
  8. 如何使用FFmpeg命令处理音视频
  9. SwiftUI Image
  10. networks.XXX.ipam.config value Additional properties are not allowed (‘gateway‘ was unexpected) 解决办法