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

小苯的因子查询

题目链接:https://www.nowcoder.com/practice/6a22a725087b4a11a1aad4fd170d1c6b?channelPut=trackerqcq12
思路解法:
武功秘籍:《阶乘因子心法》
第一层心法:核心洞察(为什么是质因子『2』?)
口诀一: “问奇偶,看老二。”
释义: 题目问你一个数是奇数还是偶数,本质上就是在问你:“这个数的质因数分解里,有没有质因子『2』?”
有 2 -> 偶数
没 2 -> 奇数
推论: “n! 的奇数因子”,就是那些完全由奇质数(3, 5, 7...)构成的因子。在构造它们时,对于质因子 2,我们只有一种选择:不选它(即 2 的指数为0)。
第二层心法:概率的真面目(为什么公式是 1 / (e₂ + 1)?)
口诀二: “概率是,『不要2』比『都要』。”
释义:
n! 的总因子数 D_total = (e₂ + 1) * (e₃ + 1) * ...
解读:对于质因子 2,我们可以选 0 到 e₂ 个(共 e₂+1 种选法);对于质因子 3,可以选 0 到 e₃ 个(共 e₃+1 种选法)...
n! 的奇数因子数 D_odd = (1) * (e₃ + 1) * ...
解读:为了保证是奇数,对于质因子 2,我们只能选 0 个(共 1 种选法);其他的奇质数随便选。
概率 P = D_odd / D_total。你会发现,后面那一长串 (e₃ + 1) * ... 全都约掉了!最后只剩下 1 / (e₂ + 1)。
第三层心法:勒让德公式的直观记忆法(这个公式到底怎么来的?)
这是最关键的一步,我们不用死记,用一个比喻来理解它。
口诀三: “求个数,办比赛;几轮胜,加起来。”
释义: 怎么求 n! 里到底有多少个质因子2?我们来为 1, 2, 3, ..., n 这 n 个数举办一场 “因子2淘汰赛”!
第一轮比赛: 所有偶数晋级,因为它们至少“携带”一个因子2。有多少个偶数?n/2 个。我们收获了 n/2 个因子2。
第二轮比赛: 只有第一轮的胜者(2, 4, 6, 8, ...)有资格参加。为了看谁能“携带”第二个因子2,我们把它们都除以2,变成 1, 2, 3, 4, ...。在这些数里,谁是新的偶数?它们原来就是 4 的倍数!有多少个?n/4 个。这些“两轮胜者”额外又贡献了 n/4 个因子2。
第三轮比赛: 只有 4 的倍数有资格参加。谁能“携带”第三个因子2?是那些 8 的倍数!有多少个?n/8 个。它们又贡献了 n/8 个因子2。
......以此类推。
结论: n! 中质因子2的总个数 e₂,就是每一轮比赛胜者的数量之和!
e₂ = n/2 + n/4 + n/8 + ...
这个公式现在是不是感觉有血有肉,非常好记了?
实战解题模板(四步搞定)
现在,你遇到这类题,脑子里过一遍心法,手上就可以直接敲代码了:
第一步:定性分析
“哦,阶乘因子问题,问奇数概率。那就是和质因子2有关。”
第二步:确定公式
“概率是 1 / (2的指数 + 1)。我需要求 n! 里 2 的指数,设为 e₂。”
第三步:计算指数 e₂
“用心法三,办淘汰赛!”
code
C++
ll e2 = 0;
for (ll p = 2; p <= n; p *= 2) {
e2 += n / p;
}
第四步:计算结果
“分母是 e₂ + 1,求它的模逆元就行了。”
code
C++
ll denominator = e2 + 1;
ll ans = qpow(denominator, MOD - 2);

http://www.gsyq.cn/news/50634.html

相关文章:

  • Linux网络--6、网络层 - 详解
  • 原型理解从入门到精通
  • 简单做一个舒尔特方格小游戏
  • C语言新手怎么快速掌握
  • Wi-Fi FTM(Fine Timing Measurement)简介
  • LISTAGG 用于将多行数据聚合为单行字符串(拼接),而与其功能相反的需求是 将单行字符串按指定分隔符拆分为多行数据
  • Atcoder FPS 24 记录
  • 扩展单调栈扫描线维护历史信息
  • 酵母单杂交 (Y1H):蛋白质 - DNA 互作研究的 基因解码器
  • ORACLE行记录转字符串用分隔符连接的两个函数:WM_CONCAT、LISTAGG
  • 20232419 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 第三十天
  • WinDbg 随笔 001 —— HelloWorld + WinDbg
  • C++篇(14)二叉树进阶算法题 - 详解
  • 2025年市场上品质好的羊毛地毯制造企业
  • 【STM32工程开源】基于STM32的人体健康监测环境
  • 实用指南:【C# OOP 入门到精通】从基础概念到 MVC 实战(含 SOLID 原则与完整代码)
  • tailwind自定义class问题小记
  • 2025年主流开源AI智能体框架平台概览 - 实践
  • Tarjan复建
  • 20251115
  • 20232307 2024-2025-1 《网络与系统攻防技术》实验五实验报告
  • EXECUTE IMMEDIATE语句分析
  • 产品更新与重构策略:创新与稳定的平衡之道 - 详解
  • Day39(9)F:\硕士阶段\Java\课程代码\后端\web-ai-code\web-ai-project01\jdbc-demo+springboot-web-quickstart
  • # Android Compose 实现 左滑删除
  • WebServer类 - 指南
  • EFCore中巧妙利用ToQueryString()实现批插(不借助第三方包)
  • 2025年11月安徽省有实力的旧房翻新企业综合推荐排行榜
  • 2025年Dynamics 365 CRM的工作行情如何?