扩展 Lucas 定理(exLucas)学习笔记  详解,一文带你彻底看懂扩展 Lucas 定理。---------------------著作权归作者所有。商业转载请联系作者获得授权,非商业
算法流程 由于 m 不是质数我们考虑以下的这三个步骤。它们组成了扩展 Lucas 的思路框架。 我们将模数 m 分解质因数 1 1 2 2 ⋯ mp 1 a 1​​p 2 a 2​​⋯p n a n​​ 我们构造方程组 { ≡ 1 ( m o d 1 1 ) ≡ 2 ( m o d 2 2 ) ⋯ ⋯ ≡ ( m o d ) ⎩ ⎨ ⎧​x≡r 1​(modp 1 a 1​​) x≡r 2​(modp 2 a 2​​) ⋯⋯ x≡r n​(modp n a n​​)​注意到这些方程里的模数两两互质。我们使用 CRT 合并求解 x 即为我们想要的答案 ( ) m o d ( r n​)modm 。 接下来的问题就完全聚焦到了 r i​的构造上来。我们考虑如下流程 明确我们要构造 ≡ ( ) ( m o d ) r i​≡( r n​)(modp i a i​​) 转化问题。我们需要求解 ( ) m o d ( r n​)modp a 其中 p 是质数。即我们要求解如下式子 ! ! ( − ) ! m o d n!(n−r)! n!​modp a 注意到分母 ! ( − ) ! r!(n−r)! 与 p a 不一定互质。那么就意味着我们没有办法求分母的逆元进一步我们无法求解这个分式。考虑我们该如何改写它。 我们目标是使分母和 p a 互质。为此我们将式子改写为 ( ! ) ( ! ) ( ( − ) ! ) m o d p v (r!) p​((n−r)!) p​(n!) p​​modp a 其中 ( ! ) − ( ! ) − ( ( − ) ! ) vv p​(n!)−v p​(r!)−v p​((n−r)!) 。注意到若 ≥ v≥a 则结果为 0 0 。 计算 ( ! ) v p​(n!) 。这可以利用 Legendre 公式求出 ( ! ) ∑ 1 ∞ ⌊ ⌋ v p​(n!) i1 ∑ ∞​⌊ p i n​⌋ 计算 ( ! ) (n!) p​。利用前置知识中提到的递归公式 ( ! ) ≡ ( ± 1 ) ⌊ / ⌋ ( ⌊ / ⌋ ! ) ( ∏ 1 ≤ ≤ ( m o d ) 且 ∤ ) ( m o d ) (n!) p​≡(±1) ⌊n/p a ⌋ (⌊n/p⌋!) p​​1≤j≤(nmodp a )且j∤p ∏​j​(modp a ) 一些注意事项 i. ( ⌊ / ⌋ ! ) (⌊n/p⌋!) p​可以利用循环来展开递归加快速度 ii. ∏ ∏j 项等价于在 ( m o d ) ! (nmodp a )! 中去掉 p 因子故这里可以直接预打表用 f[i] 来表示 ! i! 中去掉 p 因子的值。这个表只用打到 i#include #define fastio ios::sync_with_stdio(0);cin.tie(0);cout.tie(0) #define int long long #define MIKU 0 using namespace std; int n, m, p; //求解 C(n,m) mod p。 //扩展欧几里得求逆元。 int exgcd(int a, int b, int x, int y) { if(b 0) {x 1; y 0; return a;} int d exgcd(b, a%b, y, x); y - a / b * x; return d; } int inv(int a, int m) { int x, y; exgcd(a, m, x, y); return (x % m m) % m; } //对每个质因数构造 r_i struct BPP { int p, a, pa; //p:模数 a:次数 pa:p^a。 vector f; //预处理 f[i] 表示 i! 去掉 p 因子。 //构造函数计算出 pa 和 f。 BPP(int prime, int power) : p(prime), a(power) { pa 1; for(int i1; ia; i) pa * p; f.resize(pa); f[0] 1; for(int i1; i1; n/p) { if((n / pa) neg) res pa - res; //这一步完成符号修正即公式中第一个因子。 res res * f[n%pa] % pa; } return res; } //利用 vp(n!) 和 (n!)_p 算 C(n,r) mod p^a。 int C(int n, int r) { int v vp(n) - vp(r) - vp(n-r); if(v a) return 0; int res fac(n) * inv(fac(r) * fac(n-r) % pa, pa) % pa; for(; v; v--) res res * p % pa; return res; } }; //扩展 Lucas 负责完成质因数分解和 CRT 合并。 int exLucas(int n, int r, int m, int res 0) { int tmp m; for(int p2; p*ptmp; p) { //试除法分解质因数。 if(tmp % p) continue; int a 0, pa 1; for(; tmp%p0; tmp/p) a , pa * p; BPP bpp BPP(p, a); int ri bpp.C(n, r); int mi m / pa; res (res mi * ri % m * inv(mi, pa)) % m; // CRT 合并公式。 } if(tmp 1) { BPP bpp BPP(tmp, 1); int ri bpp.C(n, r); int mi m / tmp; res (res mi * ri % m * inv(mi, tmp)) % m; } return res; } signed main() { fastio; cinnmp; cout s m​n 是无解。 主要难点是不保证模数为质数。这就需要用到扩展 Lucas 定理。 下面贴出代码。相比于上面的模板代码只改动了主函数。 Show Me the Code---------------------著作权归作者所有。商业转载请联系作者获得授权非商业转载请注明出处。作者Yzu_EtherealYz源地址https://www.cnblogs.com/Yzu-EtherealYz/p/20334937来源博客园cnblogs© 版权声明本文为博主原创文章转载请附上博文链接

相关新闻

为什么顶尖AI原生团队已弃用Cursor转向Windsurf?——基于37个真实工程项目的IDE迁移成本与ROI分析(附可复用评估清单)

为什么顶尖AI原生团队已弃用Cursor转向Windsurf?——基于37个真实工程项目的IDE迁移成本与ROI分析(附可复用评估清单)

更多请点击: https://intelliparadigm.com 第一章:为什么顶尖AI原生团队已弃用Cursor转向Windsurf? Windsurf 正迅速成为 AI 原生开发团队的首选 IDE,其核心优势在于深度集成的上下文感知架构与可编程工作流引擎——这与 Cursor …

2026/7/9 5:05:03阅读更多 →
都市领航教育1688阿里巴巴运营培训专业办学能力研究报告

都市领航教育1688阿里巴巴运营培训专业办学能力研究报告

本报告由独立职业教育研究机构编制,聚焦东莞本土办学22年的连锁职业教育品牌都市领航教育,对其核心课程之一的1688阿里巴巴运营培训项目开展多维度专业评估,重点围绕行业应用价值、课程体系科学性、实战教学能力、办学保障力度、就业与创业支…

2026/7/9 5:05:03阅读更多 →
【Stable Diffusion零基础速成指南】:7天掌握文生图核心技巧,附赠50个万能提示词模板

【Stable Diffusion零基础速成指南】:7天掌握文生图核心技巧,附赠50个万能提示词模板

更多请点击: https://codechina.net 第一章:Stable Diffusion零基础入门与环境搭建 Stable Diffusion 是一款开源的文本到图像生成模型,依托扩散机制与潜在空间建模实现高质量图像合成。它对硬件要求相对友好,支持在消费级 GPU&…

2026/7/9 5:05:03阅读更多 →
甜品展示铝箔容器门店上新前怎么打样?从样品图、规格表和服务资料看清楚

甜品展示铝箔容器门店上新前怎么打样?从样品图、规格表和服务资料看清楚

做马芬时,甜品展示铝箔容器的判断要从成品状态开始。杯口、表面、盖型和配套物料放在一起看,才能知道它是否适合这次上新。 一、先从上新打样开始打样 把甜品展示铝箔容器用于布丁时,建议记录装杯量、出炉或冷藏后的表面状态,再测…

2026/7/9 6:10:08阅读更多 →
大模型选型生死线(企业级部署避坑指南):Claude Fable 5的128K token稳定性 vs GPT-5的多模态响应一致性,97%团队都踩过的3个隐性陷阱

大模型选型生死线(企业级部署避坑指南):Claude Fable 5的128K token稳定性 vs GPT-5的多模态响应一致性,97%团队都踩过的3个隐性陷阱

更多请点击: https://intelliparadigm.com 第一章:大模型选型生死线:企业级部署的终极决策框架 企业引入大模型绝非“选个开源模型微调即可”的轻量决策,而是关乎算力成本、数据主权、合规边界与业务连续性的系统性工程。一次错误…

2026/7/9 6:10:08阅读更多 →
BGE-M3 与 text-embedding-3-large 对比:RAG 场景下 5 组查询的召回率与准确率实测

BGE-M3 与 text-embedding-3-large 对比:RAG 场景下 5 组查询的召回率与准确率实测

BGE-M3 与 text-embedding-3-large 横向评测:5 大真实场景下的 RAG 性能对决在构建生产级 RAG(检索增强生成)系统时,选择合适的 Embedding 模型往往成为工程师面临的首个关键决策。本文基于 5 组跨领域真实查询数据集,…

2026/7/9 6:10:08阅读更多 →
性价比高的深圳一件代发云仓排名前十

性价比高的深圳一件代发云仓排名前十

在深圳这个寸土寸金的地方,做电商最头疼的就是仓储和发货。尤其对于宠物食品、猫砂这种重货、易损品,选错云仓,利润瞬间被吃掉,客户差评还像雪片一样飞来。我花了整整一周,调研了深圳市场上大大小小几十家云仓&#xf…

2026/7/9 6:10:08阅读更多 →
为什么90%的AI使用者输在第一步?Prompt Engineering入门避坑清单,含37个真实失败案例解析

为什么90%的AI使用者输在第一步?Prompt Engineering入门避坑清单,含37个真实失败案例解析

更多请点击: https://intelliparadigm.com 第一章:Prompt Engineering的本质与认知误区 Prompt Engineering 并非“给大模型喂词”的技巧堆砌,而是一门融合语言学、认知科学与系统工程的实践学科——其核心在于构建可复现、可验证、可演进的…

2026/7/9 6:10:08阅读更多 →
GTP/GTX/GTH/GTY四代收发器——你的板子用错了哪一代?附高频痛点FAQ(深度解析)

GTP/GTX/GTH/GTY四代收发器——你的板子用错了哪一代?附高频痛点FAQ(深度解析)

很多客户找我们买开发板的时候,会咨询“是否支持高速收发器”。但“用哪一代GT?”——咱们如何给客户评估呢。 就怕的是,如果你按照A7的GTX手册配了一个项目,后来移植到K7上,发现编码方式不兼容。再后来换到ZYNQ&…

2026/7/9 6:05:08阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/9 5:56:19阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/8 7:00:12阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/9 2:47:07阅读更多 →
Three.js 着色器光效教程

Three.js 着色器光效教程

着色器光效 Shader Light ▶ 在线运行案例 案例合集: 三维可视化功能案例(threehub.cn)开源仓库github地址: https://github.com/z2586300277/three-cesium-examples400个案例代码: 网盘链接 你将学到什么 ShaderMaterial 自…

2026/7/9 0:04:37阅读更多 →
如何5分钟掌握CS2智能库存管理:开源工具CASEMOVE终极指南

如何5分钟掌握CS2智能库存管理:开源工具CASEMOVE终极指南

如何5分钟掌握CS2智能库存管理:开源工具CASEMOVE终极指南 【免费下载链接】casemove A dedicated desktop app that enables you to move items in and out of storage units in CS2. 项目地址: https://gitcode.com/gh_mirrors/ca/casemove 还在为CS2存储单…

2026/7/9 0:04:37阅读更多 →
GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比

GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比

GBase 8a与MySQL 8.0:ALTER TABLE语法差异深度解析与实战指南1. 两种数据库的ALTER TABLE能力全景对比在数据库架构设计和运维过程中,表结构变更(DDL操作)是不可避免的需求。GBase 8a作为国产分析型数据库代表,与开源M…

2026/7/9 0:04:37阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/8 6:59:54阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/8 13:42:39阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/8 13:42:39阅读更多 →