对于质数 \(p\),有

\[{\Large
\begin{aligned}
& \binom{n}{m} \equiv \binom{\left \lfloor n/p \right \rfloor }{\left \lfloor m/p \right \rfloor } \binom{n\mod{p}}{m\mod p} \pmod{p}
\end{aligned}
}
\]

引理1

\[{\Large
\begin{aligned}
& \binom{p}{n}\mod{p}=[n=0\vee n=p]
\end{aligned}
}
\]

引理2

\[{\Large
\begin{aligned}
& (a+b)^p \equiv a^p+b^p \pmod{p}
\end{aligned}
}
\]

P3807 【模板】卢卡斯定理/Lucas 定理

直接应用上面的。\(n、m\)较小时就可以直接暴力求。由于每个 \(p\) 不同,因此不能预处理阶乘。

又因为 \(p\) 可能比 \(n、m\) 小,因此不能递推求逆元。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int p,cnt;
int ksm(int x,int k)
{
int res=1;
while(k)
{
if(k&1) res=res*x%p;
k>>=1;x=x*x%p;
}
return res;
}
int C(int n,int m)
{
int jie1=1,jie2=1;
for(int i=n;i>=n-m+1;i--) jie1=jie1*i%p;
for(int i=1;i<=m;i++) jie2=jie2*i%p;
jie2=ksm(jie2,p-2);return jie1*jie2%p;
}
int lucas(int n,int m)
{
if(m==0) return 1;
return (C(n%p,m%p)*lucas(n/p,m/p))%p;
}
void solve()
{
int n,m;cin>>n>>m>>p;n=n+m;cnt=0;
cout<<lucas(n,m)<<'\n';
}
signed main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int T;cin>>T;while(T--) solve();
}

卢卡斯(lucas)定理的更多相关文章

  1. Lucas(卢卡斯)定理

    Lucas定理 对于C(m,n)%P(P是质数)这样的问题,可以通过预处理阶乘和阶乘的逆元,来快速计算.但是当m,n大于P时,就不能保证m,n与P互质了,但不互质的情况下,乘法逆元不存在,此时就需要卢 ...

  2. Lucas(卢卡斯)定理

    Lucas(卢卡斯)定理 定义 若 \(p\) 为质数,且\(a\ge b\ge1\),则有: \[C_{a}^{b}\equiv C_{a/p}^{b/p}\cdot C_{a (mod\,p)}^ ...

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

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

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

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

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

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

  6. 组合数取模及Lucas定理

    引入: 组合数C(m,n)表示在m个不同的元素中取出n个元素(不要求有序),产生的方案数.定义式:C(m,n)=m!/(n!*(m-n)!)(并不会使用LaTex QAQ). 根据题目中对组合数的需要 ...

  7. 【算法学习笔记】组合数与 Lucas 定理

    卢卡斯定理是一个与组合数有关的数论定理,在算法竞赛中用于求组合数对某质数的模. 第一部分是博主的个人理解,第二部分为 Pecco 学长的介绍 第一部分 一般情况下,我们计算大组合数取模问题是用递推公式 ...

  8. 浅谈 Lucas 定理

    Lucas 定理是用来求 \(C^n_m\bmod p\) 的. 定理 \[C^n_m\equiv C^{n\bmod p}_{m\bmod p}\cdot C^{\lfloor n/p\rfloor ...

  9. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  10. CF451E Devu and Flowers (隔板法 容斥原理 Lucas定理 求逆元)

    Codeforces Round #258 (Div. 2) Devu and Flowers E. Devu and Flowers time limit per test 4 seconds me ...

随机推荐

  1. 大数据之路Week10_day01 (通过直接创建Hfile文件的方式往Hbase中插入数据)

    package com.wyh.parctise; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.P ...

  2. Elasticsearch搜索引擎学习笔记(五)

    搜索功能 数据准备 1.自定义词库 慕课网 慕课 课网 慕 课 网 2.新建立索引shop 3.建立mappings POST /shop/_mapping (7.x之前的版本:/shop/_mapp ...

  3. 【MATLAB习题】双摇杆机构的运动学分析

    1.双摇杆机构概述 双摇杆机构的判别方法: 最长杆长度+最短杆长度 ≤ 其他两杆长度之和,连杆(机架的对杆)为最短杆时. 如果最长杆长度+最短杆长度 >其他两杆长度之和,此时不论以何杆为机架,均 ...

  4. mysql的自增id

    为图方便,建表直接用了mysql的自增id 开发时进行插入操作时,发现插入失败id也自增了,导致id不连续 并且无论是删除还是插入,id是一直在增加 查询结果 MySQL自增ID机制: InnoDB存 ...

  5. SuiGo智能博客系统

    一款由Golang+Vue开发的博客类网站,支持大模型对话编写智能博客,同时适配PC和移动端. 功能点说明 系统主要包括 1.博客功能:博客编写也可对话AI模型协助编写.查询.编辑页面.详情页面.分享 ...

  6. nginx: [error] open() "/usr/local/nginx/nginx.pid" failed (2: No such file or directory)

    nginx 启动出现错误 nginx: [error] open() "/usr/local/nginx/nginx.pid" failed (2: No such file or ...

  7. docker搭建本地仓库

    环境准备: 服务器:9.134.130.35 私有仓库服务器,运行registry容器 客户端:9.208.244.175 测试客户端,用于上传.下载镜像文件 测试搭建本地仓库 mkdir /dock ...

  8. SLAM建图导航信息(仿真)

    博客地址:https://www.cnblogs.com/zylyehuo/ 基于[基于机器人自主移动实现SLAM建图],详见之前的博客 基于机器人自主移动实现SLAM建图 - zylyehuo - ...

  9. Centos7 虚拟机挂载未分配的空间

    客户给分配了一台虚拟机,系统安装是Centos7系统,空间为80G,df -h 命令查看系统后发现只有40G左右的空间可用,剩余空间未分配.下面记录主要过程: 查看当前已分配的空间 df -h [ro ...

  10. 一款 .NET 开源、功能强大的远程连接管理工具,支持 RDP、VNC、SSH 等多种主流协议!

    前言 今天大姚给大家分享一款基于 .NET 开源(GPL-2.0 license).免费.功能强大的 Windows 远程连接管理工具,支持 RDP.VNC.SSH 等多种主流协议:mRemoteNG ...