当前位置: 首页 > news >正文

洛谷 P3807:卢卡斯定理 / Lucas 定理

【题目来源】
https://www.luogu.com.cn/problem/P3807

【题目描述】
给定整数 n,m,p 的值,求出 C(n+m, n) mod p 的值。
输入数据保证 p 为质数。
注:C 表示组合数。

【输入格式】
本题有多组数据。
第一行一个整数 T,表示数据组数。
对于每组数据:一行,三个整数 n,m,p。

【输出格式】
对于每组数据,输出一行,一个整数,表示所求的值。

【输入样例】
2
1 2 5
2 1 5

【输出样例】
3
3

【数据范围】
对于 100% 的数据,1≤n,m,p≤10^5,1≤T≤10。

【算法分析】
● Lucas 定理是数论中用于计算组合数 C(n, m) 模素数 p 的值的经典定理,由法国数学家 Édouard Lucas 提出。其核心思想是将大数的组合数模运算分解为更小规模的子问题,适用于模数为素数的应用场景。

● 算法竞赛中,常用 Lucas 定理的如下形式。
C(n, m) ≡ C(n%p, m%p) • C(n/p, m/p) (mod p),其中 p 为素数。

● Lucas 定理的 C++ 代码如下所示。

typedef long long LL;LL C(LL n,LL m,LL p) {if(m>n) return 0;return fac[n]*fastPow(fac[m],p-2,p)*fastPow(fac[n-m],p-2,p)%p;
}LL Lucas(LL n,LL m,LL p) {if(m==0) return 1;else return C(n%p,m%p,p)*(Lucas(n/p,m/p,p))%p;
}

【算法代码】

#include <bits/stdc++.h>
using namespace std;typedef long long LL;
const int N=1e5+5;
LL fac[N];
int T;int fastPow(LL a,LL n,LL p) {LL ans=1;while(n) {if(n & 1) ans=ans*a%p;n>>=1;a=a*a%p;}return ans%p;
}LL C(LL n,LL m,LL p) {if(m>n) return 0;return fac[n]*fastPow(fac[m],p-2,p)*fastPow(fac[n-m],p-2,p)%p;
}LL Lucas(LL n,LL m,LL p) {if(m==0) return 1;else return C(n%p,m%p,p)*(Lucas(n/p,m/p,p))%p;
}int main() {fac[0]=1;cin>>T;while(T--) {LL n,m,p;cin>>n>>m>>p;for(LL i=1; i<=p; i++) {fac[i]=(fac[i-1]*i)%p;}cout<<Lucas(n+m,m,p)%p<<endl;}return 0;
}/*
in:
2
1 2 5
2 1 5out:
3
3
*/




【参考文献】
https://oi-wiki.org/math/number-theory/lucas/
https://cloud.tencent.com/developer/article/1092375



 

http://www.jsqmd.com/news/124876/

相关文章:

  • Elasticdump 如何优雅地处理百万级数据?深入解析 Scroll 稳定性保障机制
  • Python在云原生微服务可观测体系建设中的全链路指标采集与诊断实践 - 教程
  • 如何深度掌控AMD Ryzen性能:SMUDebugTool终极调优指南
  • Sketch MeaXure终极指南:如何5分钟搞定设计标注与切图
  • MouseTester终极指南:5分钟精通专业鼠标性能测试
  • Sketch MeaXure:重新定义设计工作流的智能化标注革命
  • 2025年年终硅酸钠厂家综合实力排行与推荐:基于产能品质服务多维度客观评测 - 品牌推荐
  • 4G 内存专属!Ubuntu22.04+Windows 200G 硬盘双系统分区表(含 swap + 全功能详解)
  • 国产数据库DM8从入门到实操:全流程学习心得
  • 终极指南:智能计时工具如何彻底改变你的演讲体验
  • PPTTimer:解放双手的智能PPT演讲计时器终极指南
  • 城通网盘解析工具终极指南:如何快速获取直连下载地址
  • N_m3u8DL-CLI-SimpleG终极解密:5个技巧让M3U8下载效率翻倍
  • Scanner类的常用方法入门必看:零基础手把手教学
  • AMD Ryzen性能优化终极指南:专业调试工具完整教程
  • 小红书直播监控革命:一次配置永久录制
  • 城通网盘下载终极指南:3分钟快速获取免费直连地址
  • 工业现场通信模块开发中的Keil安装常见问题解析
  • 终极指南:5步快速上手AMD SMU调试工具,彻底释放Ryzen处理器隐藏性能
  • BLIP-2 调用示例
  • AMD调优实战:3大秘诀让你的Ryzen处理器性能大幅提升
  • Elasticsearch Explain API 详解:KNN 混合查询的分数计算与性能分析
  • 基于Django的农业害虫识别系统设计与实现_k83jhigb
  • 终极PPT演讲时间管理方案:悬浮计时器完整指南
  • PPT演讲计时器终极指南:智能悬浮时钟完全教程
  • Sunshine游戏串流负载均衡终极配置指南:打造全家共享的高性能游戏系统
  • Elasticsearch Scroll ID 详解
  • 如何快速掌握城通网盘直连解析:告别限速烦恼的完整指南
  • 5分钟精通音乐格式转换:ncmdumpGUI完全使用手册
  • MouseTester专业鼠标性能测试工具:从入门到精通的实战指南