题目描述

输入描述:

输入数据共一行,一个正整数n,意义如“问题描述”。

输出描述:

输出一行描述答案:
一个正整数k,表示S的末尾有k个0

输入例子:
10
输出例子:
7

-->

示例1

输入

10

输出

7

说明

解题思路:求1~n每个数的阶乘相乘后尾数为0的个数。
AC代码一(365ms):暴力枚举1~n也能过?说明测试数据不大。采用法一可以过:直接统计每个元素包含因子为5的个数。但采用法二会TLE,原因同样是暴力枚举,但每次需要重新计算当前i的因子为5的个数,而法一让很多数可以省去这一步,只当枚举到i为5的倍数才会进入那个while循环,可能超时的原因就出在这里。
 #include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main(){
int n,num,tmp;LL sum;
while(~scanf("%d",&n)){
sum=,num=;//num一开始置0,以后每次累加每个元素包含因子为5的个数即可
for(int i=;i<=n;++i){//从1枚举到n
tmp=i;//表示当前i!=(i-1)!*i
while(tmp%==)num++,tmp/=;//num累加当前i元素包含因子为5的个数
sum+=num;//累加i!尾数为0的个数
}
printf("%lld\n",sum);
}
return ;
}

AC代码二(78ms):根据法一:求N!尾数有多少个0只需求N内为5的倍数的数包含因子为5的个数总和即可,而此题是求1~n内每个数的阶乘相乘之后尾数为0的个数,因此我们同样枚举N内所有为5的倍数i,每求出i包含因子为5的个数num后,因为i~n(n-i+1个元素)内每个数的阶乘都包含当前i这个元素,所以sum累加num*(n-i+1)即可。

 #include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main(){
LL n,tmp,num,sum;
while(~scanf("%lld",&n)){
sum=;
for(LL i=;i<=n;i+=){
tmp=i;num=;
while(tmp%==)num++,tmp/=;
sum+=num*(n-i+);
}
printf("%lld\n",sum);
}
return ;
}

AC代码三(5ms):如果测试数据真的很大为10^9,那么前两个肯定是超时的。因此能否根据法二同样用O(log5n)的时间复杂度计算出尾数为0的个数?根据法二公式:假设我们要计算1!~126!,即n=126,则①126/5=25,说明126!中有25个数是5的倍数;②126/25=5,说明126!中有5个数是25的倍数;③126/125=1,说明126!中有1个数是125的倍数。现对1!~126!按包含因子为5的个数(个数相同为同一组)从小到大分成k=n/i=126/5=25组:(共有k-1组每一组有都有5i(i=1,2,3...)个数的阶乘包含因子为5的个数是相同的,最后一组有(1+n%i)个元素)

j=1--->{5!,6!,7!,8!,9!};//有i=5个元素每个元素包含1个因子5

j=2--->{10!,11!,12!,13!,14!};//有i=5个元素每个元素包含2个因子5

...

j=24-->{120!,121!,122!,123!,124!};//有i=5个元素每个元素包含24个因子5

j=25-->{125!,126!}//有2(1+n%i=1+126%5=1+1=2)个元素每个元素包含25个因子5

以上分组是i=5的情况,其他i值基本和这个一样:由等差数列求和公式可求得1!*...*126!中一共有x=(1+k-1)(k-1)/2*i+k*(1+n%i)(其中k=n/i,i=51,52,53...)个因子5,之后按此公式累加(因子为5的个数)x的值(sum+=x)即可求出1!*...*n!尾数为0的个数sum。

 #include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main(){
LL n,sum;
while(~scanf("%lld",&n)){
sum=;
for(LL i=;i<=n;i*=){
LL k=n/i;
sum+=k*(k-)/*i+k*(+n%i);
}
printf("%lld\n",sum);
}
return ;
}

牛客小白月赛5-D-阶乘(求n内每个数的阶乘相乘后尾数为0的个数)的更多相关文章

  1. 牛客小白月赛6 水题 求n!在m进制下末尾0的个数 数论

    链接:https://www.nowcoder.com/acm/contest/135/C来源:牛客网 题目描述 其中,f(1)=1;f(2)=1;Z皇后的方案数:即在Z×Z的棋盘上放置Z个皇后,使其 ...

  2. 树的最长链-POJ 1985 树的直径(最长链)+牛客小白月赛6-桃花

    求树直径的方法在此转载一下大佬们的分析: 可以随便选择一个点开始进行bfs或者dfs,从而找到离该点最远的那个点(可以证明,离树上任意一点最远的点一定是树的某条直径的两端点之一:树的直径:树上的最长简 ...

  3. 牛客小白月赛8 - E - 诡异数字 数位DP

    牛客小白月赛8 - E - 诡异数字 题意: 求区间中,满足限制条件的数字的个数. 限制条件就是某些数字不能连续出现几次. 思路: 比较裸的数位DP, DP数组开一个dp[len][x][cnt] 表 ...

  4. 牛客小白月赛18 Forsaken喜欢数论

    牛客小白月赛18 Forsaken喜欢数论 题目传送门直接点标题 ​ Forsaken有一个有趣的数论函数.对于任意一个数xxx,f(x)f(x)f(x)会返回xxx的最小质因子.如果这个数没有最小质 ...

  5. 【牛客小白月赛21】NC201604 Audio

    [牛客小白月赛21]NC201604 Audio 题目链接 题目大意: 给出三点 ,求到三点距离相等的点 的坐标. 解析 考点:计算几何基础. 初中蒟蒻表示不会什么法向量.高斯消元..qwq 方法一: ...

  6. 【牛客小白月赛21】NC201605 Bits

    [牛客小白月赛21]NC201605 Bits 题目链接 题目描述 Nancy喜欢做游戏! 汉诺塔是一个神奇的游戏,神奇在哪里呢? 给出3根柱子,最开始时n个盘子按照大小被置于最左的柱子. 如果盘子数 ...

  7. 牛客网 牛客小白月赛5 I.区间 (interval)-线段树 or 差分数组?

    牛客小白月赛5 I.区间 (interval) 休闲的时候写的,但是写的心情有点挫,都是完全版线段树,我的一个队友直接就水过去了,为啥我的就超内存呢??? 试了一晚上,找出来了,多初始化了add标记数 ...

  8. 牛客小白月赛18 Forsaken给学生分组

    牛客小白月赛18 Forsaken给学生分组 Forsaken给学生分组 链接:https://ac.nowcoder.com/acm/contest/1221/C来源:牛客网 ​ Forsaken有 ...

  9. 牛客小白月赛19 E 「火」烈火燎原 (思维,树)

    牛客小白月赛19 E 「火」烈火燎原 (思维,树) 链接:https://ac.nowcoder.com/acm/contest/2272/E来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空 ...

随机推荐

  1. java native interface JNI 调用Java方法

    在上一篇文章中介绍了JNI.以及java调用JNI.这篇讲一下 JNI调用java方法. 通过使用合适的JNI函数,你能够创建Java对象,get.set 静态(static)和 实例(instanc ...

  2. 怎样使用SSH连接OpenStack上的云主机

    转载请注明出处.否则将追究法律责任http://blog.csdn.net/xingjiarong/article/details/47021815 在上一篇博客中我介绍了怎样在OpenStack中创 ...

  3. Deepin-安装和卸载软件

    一般默认厂商源安装软件 安装软件: 示例:sudo apt-get install xx 实例:sudo apt-get install nodejs 卸载软件: 示例:sudo apt-get -- ...

  4. SGU - 186 - The Chain (贪心)

    186. The Chain time limit per test: 0.25 sec. memory limit per test: 4096 KB input: standard input o ...

  5. 关于OutOfMemoryError的处理

    转自:http://www.blogjava.net/rosen/archive/2010/05/21/321575.html http://www.blogjava.net/rosen/archiv ...

  6. linux 多个文件中查找字符串 hadoop 3 安装 调试

    http://www.cnblogs.com/iLoveMyD/p/4281534.html 2015年2月9日 14:36:38 # find <directory> -type f - ...

  7. Mac Mysql [ERR] 2006 - MySQL server has gone away

    Mac mysql 安装后,导入sql数据,出现这个错误: 处理方式,是因为sql文件太大,需要修改mysql的配置.如果没有my.cnf就自己建一个. cd /etc sudo vim my.cnf ...

  8. 深入分析linux调度机制

    一.说明 本文以linux-2.4.10 为例主要分析Linux 进程调度模块中的schedule 函数及其相关的函数.另外相关的前提知识也会说明.默认系统平台是自己的i386 架构的pc. 二.前提 ...

  9. 苹果Instruments/Shark性能调试工具概述

    在Mac OS X上你可以使用Gprof这样的UNIX工具用于测试程序性能.当然,Apple也有自己的Profiling Tools,用得比较多的是Shark.10.5里还引入了一个基于DTrace的 ...

  10. 并不对劲的bzoj4012:loj2116:p3241: [HNOI2015]开店

    题目大意 有一棵\(n\)(\(n\leq1.5*10^5\))个节点的二叉树,有点权\(x\),边权\(w\),\(q\)(\(q\leq2*10^5\))组询问,每组询问给出\(u,l,r\),求 ...