小苯的因子查询

news/2025/11/15 21:25:39/文章来源:https://www.cnblogs.com/leeezhusl/p/19226285

题目链接: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.mzph.cn/news/966506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详细介绍:MongoDB 自动化脚本安装方案

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Linux网络--6、网络层 - 详解

Linux网络--6、网络层 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

原型理解从入门到精通

原型这块知识点,其实在我们工作中的使用非常简单。但是俗话说“面试造火箭,工作拧螺丝”,在面试中,面试官不时就会考察一些花里胡哨的问题,所以,我们只有将这个概念和他的相关知识理解透彻,才能以不变应万变。两…

2025-11-15

Problem - 1858B - Codeforces(1500)(贪心) 这题一个是要读题 在不包括cookie seller的区间才算没吃饼干的时间sum += (s[i] - s[i - 1] - 1) / d; 在加上路过cookie seller时吃的饼干数 sum += m - 1; 然后贪心的…

Pandas - read_html()

Pandas - read_html()When I ran below code: df = pd.read_html(https://en.wikipedia.org/wiki/List_of_countries_by_population) I got error: HTTPError: HTTP Error 403: Forbidden I can open that URL in brow…

实用指南:Linux企业级解决方案架构:字节跳动短视频推荐系统全链路实践

实用指南:Linux企业级解决方案架构:字节跳动短视频推荐系统全链路实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: …

实用指南:PyTorch DataLoader 高级用法

实用指南:PyTorch DataLoader 高级用法2025-11-15 20:48 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block …

简单做一个舒尔特方格小游戏

以下是一个 Python 简易舒尔特方格小游戏,基于 tkinter 实现(无需额外安装第三方库),支持自定义方格大小、计时计分、自动生成随机数字,新手可直接复制运行: 舒尔特方格小游戏(Python 代码) `import tkinter a…

C语言新手怎么快速掌握

C 语言新手快速掌握的核心逻辑是:先抓核心语法(少而精),再练动手实战(高频场景),最后补底层原理(避免踩坑),全程围绕 “用代码解决实际问题” 展开,拒绝死记硬背。以下是 4 周可落地的学习方案,兼顾效率和…

RSS and Atom

RSS and AtomWhat is RSS? ChatGPT said:RSS (Really Simple Syndication) is a standard web format used to publish frequently updated content, such as news articles, blog posts, podcasts, and announcement…

Wi-Fi FTM(Fine Timing Measurement)简介

1. 什么是 Wi-Fi FTM? Wi-Fi FTM(Fine Timing Measurement)是 IEEE 802.11mc 标准中引入的一项精确测距技术。它通过 Wi-Fi 设备之间的多次往返时间(Round-Trip Time, RTT)测量,计算两者之间的距离,从而实现室内…

通用会话控制方案

一、会话控制概念目的:在无状态的 HTTP 请求间识别/鉴权用户身份并维持登录状态。 核心问题:谁保存“用户状态”?(服务器 / 客户端 / 第三方认证服务器),以及如何安全地在多请求间传递该凭证(Cookie / Authoriz…

LISTAGG 用于将多行数据聚合为单行字符串(拼接),而与其功能相反的需求是 将单行字符串按指定分隔符拆分为多行数据

LISTAGG 用于将多行数据聚合为单行字符串(拼接),而与其功能相反的需求是 将单行字符串按指定分隔符拆分为多行数据。Oracle 中没有直接对应的内置内置函数**,但可以通过以下方法实现类似效果: 方法1:使用 CONNEC…

ESP32 I2S音频总线学习笔记(八):添加按键控制功能 - 详解

ESP32 I2S音频总线学习笔记(八):添加按键控制功能 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

2025年8款AI论文写作神器推荐:轻松搞定毕业论文查重

2025 年毕业论文仍是学子难题,导师强调其重要性让同学们压力倍增。从选题到应对查重,每一步都困难重重。不过,科技发展带来新希望,AI 技术可提高写作效率。文章推荐了 2025 年 8 款 AI 论文写作神器,如 PaperNex、…

基于python的酒店管理系统_36rhk752(Pycharm Flask Django成品源码LW) - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

pythontip 从字典中删除一组键

编写一个程序,使用提供的键列表从字典中删除指定的键集合。 定义函数remove_keys(),有两个参数:字典dict_input和键列表key_list。 在函数中,从字典中删除key_list中存在的所有键。 返回更新后的字典。 示例输入 {…

Softmax 函数全面而详细的解读,原理、图像、应用 - 详解

Softmax 函数全面而详细的解读,原理、图像、应用 - 详解2025-11-15 20:18 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important;…

中级前端工程师详细技能清单

一、JavaScript:超越语法,深入核心技能领域具体技能点中级要求与深度理解语言核心 作用域与闭包 能解释清楚词法作用域,能使用闭包解决实际问题(如模块模式、数据私有化),能避免常见的内存泄漏问题。 原型与原型…