博客园同步

原题链接

简要题意:

求 ∏ i = 1 n ∏ j = 1 i j \prod_{i=1}^n \prod_{j=1}^i j ∏i=1n​∏j=1i​j 的末尾有几个零。

显然,我们对原式进行修改:

∏ i = 1 n ∏ j = 1 i j \prod_{i=1}^n \prod_{j=1}^i j i=1∏n​j=1∏i​j

= ∏ j = 1 n j ⋅ ( n − j + 1 ) =\prod_{j=1}^n j \cdot (n-j+1) =j=1∏n​j⋅(n−j+1)

这是因为每个数 j j j 在所有 ≥ j \geq j ≥j 的阶乘中都被乘了一遍。

下面我们只需要考虑:

末尾零是如何产生的?—— 2 × 5 = 10 2 \times 5 = 10 2×5=10.即每一个 2 2 2 和 5 5 5 这一组就会给答案产生 1 1 1 的贡献。

那么, 5 5 5 的个数和 2 2 2 的个数哪个多呢?

显然, 2 2 2 的个数 不小于 5 5 5 的个数, 这是因为,你只需比较这两个式子:

∑ j = 1 ∞ ⌊ n 5 j ⌋ \sum_{j=1}^{\infty} \lfloor{ \frac{n}{5^j} \rfloor} j=1∑∞​⌊5jn​⌋

∑ j = 1 ∞ ⌊ n 2 j ⌋ \sum_{j=1}^{\infty} \lfloor{ \frac{n}{2^j} \rfloor} j=1∑∞​⌊2jn​⌋

分子相同,当然分母小的大喽!

所以我们只需要计算 5 5 5 的个数。

下面我们定义:

F n = ∑ j = 1 ∞ ⌊ n 5 j ⌋ F_n = \sum_{j=1}^{\infty} \lfloor{ \frac{n}{5^j} \rfloor} Fn​=j=1∑∞​⌊5jn​⌋

也就是 n n n 有的 5 5 5 的个数。

那么对于每个 5 × i 5 \times i 5×i 即 5 5 5 的倍数,它们会对答案产生的贡献是:

F 5 × i ⋅ ( n + 1 − 5 × i ) F_{5 \times i} \cdot (n+1-5 \times i) F5×i​⋅(n+1−5×i)

这是因为,我们上面的那个变形。还记得吗?

∏ i = 1 n ∏ j = 1 i j \prod_{i=1}^n \prod_{j=1}^i j i=1∏n​j=1∏i​j

= ∏ j = 1 n j ⋅ ( n − j + 1 ) =\prod_{j=1}^n j \cdot (n-j+1) =j=1∏n​j⋅(n−j+1)

只需要算单点的贡献即可。

时间复杂度为: O ( n 5 log ⁡ 5 n ) = O ( n log ⁡ n ) O(\frac{n}{5} {\log}_5 n) = O(n \log n) O(5n​log5​n)=O(nlogn)

如果你觉得是 O ( n log ⁡ n ) O(n \log n) O(nlogn) 会妥妥的超时,那你错了。

在不忽略任何常数的情况下:

O ( 1 0 8 5 log ⁡ 5 1 0 8 ) = 12 × ( 2 × 1 0 7 ) = 2.4 × 1 0 8 O(\frac{10^8}{5} {\log}_5 10^8) = 12 \times (2 \times 10^7) = 2.4 \times 10^8 O(5108​log5​108)=12×(2×107)=2.4×108

你可能觉得这个时间复杂度还是有点危险?

确实,这里有 log ⁡ 5 n {\log}_5 n log5​n 的更优算法,但这里不再提及。

这可能是因为洛谷的评测机比较快吧……

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;typedef long long ll;inline ll read(){char ch=getchar();int f=1;while(ch<'0' || ch>'9') {if(ch=='-') f=-f; ch=getchar();}ll x=0;while(ch>='0' && ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x*f;}ll n,ans=0;inline int five(ll n) { //计算5的个数int s=0;while(n%5==0)s++,n/=5;return s;
}int main(){n=read();for(int i=1;i<=n/5;i++) {ans+=five(5*i)*(n+1-5*i);} printf("%lld\n",ans);return 0;
}

洛谷 P2388 阶乘之乘 题解相关推荐

  1. 洛谷P1129 [ZJOI2007] 矩阵游戏 题解

    洛谷P1129 [ZJOI2007] 矩阵游戏 题解 题目链接:P1129 [ZJOI2007] 矩阵游戏 题意:给定一张有黑白棋子的正方形棋盘,问存不存在解法使得经过若干次交换行或列的操作后,左上角 ...

  2. 洛谷P3336 [ZJOI2013]话旧 题解

    洛谷P3336 [ZJOI2013]话旧 题解 题目链接:P3336 [ZJOI2013]话旧 题意:小林跟着银河队选手去了一趟宇宙比赛,耳濡目染,变得学术起来.回来后,他发现世界大变样了.比丘兽究级 ...

  3. 洛谷P4683 [IOI2008] Type Printer 题解

    洛谷P4683 [IOI2008] Type Printer 题解 题目链接:P4683 [IOI2008] Type Printer 题意: 你需要利用一台可移动的打印机打印出NNN个单词.这种可移 ...

  4. 洛谷P3647 [APIO2014] 连珠线 题解

    洛谷P3647 [APIO2014] 连珠线 题解 题目链接:P3647 [APIO2014] 连珠线 题意: 在达芬奇时代,有一个流行的儿童游戏称为连珠线.当然,这个游戏是关于珠子和线的.线是红色或 ...

  5. 洛谷P4170 [CQOI2007]涂色 题解

    洛谷P4170 [CQOI2007]涂色 题解 题目链接:P4170 [CQOI2007]涂色 题意: 假设你有一条长度为 555 的木板,初始时没有涂过任何颜色.你希望把它的 555 个单位长度分别 ...

  6. 洛谷P1868 饥饿的奶牛 题解

    洛谷P1868 饥饿的奶牛 题解 题目链接:P1868 饥饿的奶牛 题意: 有一条奶牛冲出了围栏,来到了一处圣地(对于奶牛来说),上面用牛语写着一段文字. 现用汉语翻译为: 有 NNN 个区间,每个区 ...

  7. 洛谷P1462 通往奥格瑞玛的道路 题解

    洛谷P1462 通往奥格瑞玛的道路 题解 题目链接:P1462 通往奥格瑞玛的道路 题意:在艾泽拉斯,有 nnn 个城市.编号为 1,2,3,-,n1,2,3,\ldots,n1,2,3,-,n . ...

  8. 洛谷 P2015 二叉苹果树 题解

    洛谷 P2015 二叉苹果树 题解 洛谷 P2015 题目 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有NNN个结点(叶子点或者树枝分叉点),编号为1-NNN ...

  9. 洛谷P3879 [TJOI2010] 阅读理解 题解

    洛谷P3879 [TJOI2010] 阅读理解 题解 题目链接:P3879 [TJOI2010] 阅读理解 题意: 英语老师留了 NNN 篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节 ...

最新文章

  1. UTRAN 的用户面和控制面
  2. 微型计算机2013年10月下,微型计算机及接口技术2013年10月真题试题(04732)
  3. cuda 安装_win10+VS 2017 安装 CUDA(Visual Studio Integration失败)
  4. python class 是否存在某个变量_Python编程思想(29):使用type()函数定义类
  5. 【错误记录】Mac 中 IntelliJ IDEA 运行 Python 程序报错 ( “Python“ 因为出现问题而无法打开 )
  6. 1024分辨率章子怡/郭富城《最爱》HD国语中字
  7. php sql漏洞修复,php sql注入漏洞与修复
  8. Redis概述、数据类型
  9. 信息学奥赛一本通 1095:数1的个数 | OpenJudge NOI 1.5 40
  10. 10倍,BoostKit鲲鹏全局缓存3大创新技术助力Ceph性能提升
  11. 二维数组最大值首尾相连
  12. kali linux无法启动服务,不好了!出问题了!在安装Kali Linux之后启动系统时
  13. [其他] 10种技巧可提升Android应用运行效果
  14. python排序算法——冒泡排序时间复杂度
  15. 数据仓库与数据挖掘课后思考题整理
  16. PDF文件怎么转换成Word文档
  17. 绝对最大额定值(ABSOLUTE MAXIMUM RATINGS: ABS)是否可以超过
  18. 飞腾D2000 偶尔识别不到网卡
  19. 众盟超级推的“私域营销”,如何实现人人优活的流量十倍增?
  20. 掘金15W沸点简单分析(二)

热门文章

  1. 东北大学计算机面试有英语吗,2021年度考东北大学计算机研英语口语面试整理精华.doc...
  2. 神舟战神笔记本插入耳机后声音一只大一只小
  3. C++计算矩阵的最大最小值MaxMin和最小最大值MinMax。
  4. 第二章 第4节——块元素
  5. WinForm:模态窗口与非模态窗口、Close与Dispose
  6. 单片机-继电器-电磁阀
  7. fastboot命令驱动修改(uboot-imx/drivers/fastboot/fastboot.c)
  8. Linux ls 只显示目录的方法
  9. 月薪12K北漂程序员的真实生活!
  10. uniCloud中云函数、云对象、Schema表、openDB、JQL概述