【面试经典 150 | 数学】阶乘后的零

文章目录

  • 写在前面
  • Tag
  • 题目来源
  • 题目解读
  • 解题思路
    • 方法一:数学+优化计算
  • 写在最后

写在前面

本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更……

专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾与总结,文章结构大致如下,部分内容会有增删:

  • Tag:介绍本题牵涉到的知识点、数据结构;
  • 题目来源:贴上题目的链接,方便大家查找题目并完成练习;
  • 题目解读:复述题目(确保自己真的理解题目意思),并强调一些题目重点信息;
  • 解题思路:介绍一些解题思路,每种解题思路包括思路讲解、实现代码以及复杂度分析;
  • 知识回忆:针对今天介绍的题目中的重点内容、数据结构进行回顾总结。

Tag

【数学-阶乘】


题目来源

172. 阶乘后的零


题目解读

给你一个整数 n,求出 n! 的结果中尾部 0 的数量,其中:

n ! = n ∗ ( n − 1 ) ∗ ( n − 2 ) ∗ . . . ∗ 3 ∗ 2 ∗ 1 n!=n*(n-1)*(n-2)*...*3*2*1 n!=n(n1)(n2)...321


解题思路

学习 官方题解.

方法一:数学+优化计算

n! 尾零的数量即为 n! 中因子 10 的个数,而 10 = 2 x 5,因此转换成求 n! 中质因子 2 的个数和 质因子 5 的个数的较小值。

由于质因子 5 的个数不会大于质因子 2 的个数(证明如下),我们可以仅考虑质因子 5 的个数 。n! 中质因子 5 的个数等于 [1, n] 的每个数的质因子 5 的个数之和,我们可以遍历 [1, n] 的所有 5 的倍数求出。

代码 1

class Solution {
public:int trailingZeroes(int n) {int cout_5 = 0;for (int i = 5; i <= n; i += 5) {int cur = i;while (cur % 5 == 0) {cout_5++;cur /= 5;}	}return cout_5;}
};

证明

[1, n]p 的倍数有 n 1 = ⌊ n p ⌋ n_1= \lfloor{\frac{n}{p}} \rfloor n1=pn,这些数至少贡献出了 n 1 n_1 n1 个质因子 p。一般地,[1, n] 中质因子 p 的个数为

∑ k = 1 ∞ ⌊ n p k ⌋ \sum_{k=1}^{\infty}{\lfloor \frac{n}{p^k} \rfloor} k=1pkn

上式表明,n 不变,p 越大,质因子的个数越小,因此 [1, n] 中质因子 5 的个数不会大于质因子 2 的个数。证毕。

优化

[1, n] 中质因子 5 的个数为:

∑ k = 1 ∞ ⌊ n 5 k ⌋ \sum_{k=1}^{\infty}{\lfloor \frac{n}{5^k} \rfloor} k=15kn

因此我们可以通过不断将 n 除以 5,并将结果累加即得到答案。

代码 2

class Solution {
public:int trailingZeroes(int n) {int res = 0;while (n) {n /= 5;res += n;}return res;}
};

复杂度分析

时间复杂度: O ( n ) O(n) O(n)。优化后的时间复杂度为 O ( l o g n ) O(logn) O(logn)

空间复杂度: O ( 1 ) O(1) O(1)


写在最后

如果您发现文章有任何错误或者对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度的方法,欢迎评论区交流。

最后,感谢您的阅读,如果有所收获的话可以给我点一个 👍 哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/624290.html

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

相关文章

【网络安全】常见的网路安全设备及功能作用总结

常见的网路安全设备及功能作用总结 [一、 WAF 应用防火墙][二、IDS 入侵检测系统&#xff1a;][三、IPS 入侵防御系统&#xff08;入侵检测入侵防御&#xff09;][四、SOC 安全运营中心][五、SIEM 信息安全和事件管理][六、Vulnerability Scanner漏洞扫描器][七、UTM 统一威胁管…

强化学习(一)基础概念入门

文章目录 1. 什么是强化学习&#xff1f;2. 强化学习的基本元素3. 相关衍生元素3.1 策略(Policy)3.2 状态转移(State Transition)3.3 回报(Return)3.4 价值函数(Value Function) 4. 算法分类4.1 按环境是否已知划分4.2 按学习方式划分4.3 按学习目标划分 参考资料 1. 什么是强化…

网络流量中的准周期通信行为的分析和检测

论文地址&#xff1a;https://www.sciencedirect.com/science/article/abs/pii/S1005888511604408 论文源码&#xff1a;无 在电脑应用程序中&#xff0c;有一种一直运行的应用程序&#xff0c;该程序的网络流量也贯穿了用户整个使用时间。这些应用具有一种特殊的通信行为&…

C盘空间不够怎么办?

一。用foldersize看各目录占用空间大小 foldersize很多人可能都知道&#xff0c;不过网上多数能找到一些旧版的&#xff0c;在win10、win11上貌似不太好用&#xff0c;比如foldersize2.6版本&#xff0c;我是没整明白。。 解决办法很简单&#xff0c;直接去下最新版本的搞&am…

【web开发网页制作】html+css家乡长沙旅游网页制作(4页面附源码)

家乡长沙网页制作 涉及知识写在前面一、网页主题二、网页效果Page1、主页Page2、历史长沙Page3、著名人物Page4、留言区 三、网页架构与技术3.1 脑海构思3.2 整体布局3.3 技术说明书 四、网页源码HtmlCSS 五、源码获取5.1 获取方式 作者寄语 涉及知识 家乡长沙网页制作&#x…

Linux软件包管理器yum—1

目录 一、Linux下软件安装的方式 二、yum 2.1查看yum已配置的源&#xff1a; 2.2查看yum配置文件&#xff1a; 2.3使用root用户安装软件&#xff1a; 2.4模糊搜索 2.5安装软件&#xff1a; 2.6卸载软件&#xff1a; 2.7扩展源&#xff1a; 2.8yum源更新&#xff1a; 一…

IntelliJ IDEA2024 安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 IDEA&#xff08;Integrated Development Environment for Apache&#xff09; 是一款专为 Apache 开发者设计的集成开发环境。该软件提供了丰富的功能和工具&#xff0c;帮助开发者更高效地创建、调试和部署 Apache 项目。 主…

pta L1-027 出租

L1-027 出租 分数 20 全屏浏览 切换布局 作者 陈越 单位 浙江大学 下面是新浪微博上曾经很火的一张图&#xff1a; 一时间网上一片求救声&#xff0c;急问这个怎么破。其实这段代码很简单&#xff0c;index数组就是arr数组的下标&#xff0c;index[0]2 对应 arr[2]1&#x…

python--4函数def,本质、值传递、引用传递、默认值参数、*参数名、**变量、lambda [参数]: 函数、偏函数、递归、递归练习

学习目标&#xff1a; 函数def,本质、值传递、引用传递、默认值参数、*参数名、**变量、lambda [参数]: 函数、偏函数、递归、 递归练习 学习内容&#xff1a; 函数def,本质、值传递、引用传递、默认值参数、*参数名、**变量、lambda [参数]: 函数、偏函数、递归、 递归练习 …

微博聚类文本分析和可视化

本文使用python抓取微博数据并对微博文本分析和可视化&#xff0c;LDA&#xff08;树图&#xff09;、关系图、词云、时间趋势&#xff08;折线图&#xff09;、热度地图、词典情感分析&#xff08;饼图和3D柱状图&#xff09;、词向量神经网络情感分析、tfidf聚类、词向量聚类…

如何批量删除不包含指定关键字的数据行?

一、需求 有一个报名表&#xff0c;包括年龄&#xff0c;地址&#xff0c;特长等数据&#xff0c;现在想删除特长一列中不含“篮球”这个关键字行&#xff0c;可以使用这些办法。 二、删除数据 方法1.自动筛选&#xff0c; 1.1 选中数据后&#xff0c;点击数据选项卡&#…

SimpleImputer缺失数据处理报错解决方案

作者Toby&#xff0c;来源公众号&#xff1a;Python风控模型 SimpleImputer缺失数据处理报错解决方案 今天有学员反馈缺失值代码报错&#xff0c;由于sklearn缺失值处理的包升级&#xff0c;下面把官网最新的缺失值处理代码奉上。 参考https://scikit-learn.org/stable/module…