题目描述

输入描述:

输入数据共一行,一个正整数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. 使用POI操作Excel时new XSSFWorkbook ()报错java.lang.NoSuchMethodError解决方式

    使用最新的POI3.11时,在执行 Workbook  workBook = new XSSFWorkbook ();这段代码时出现错误: java.lang.NoSuchMethodError: j ...

  2. Jenkins系列之-—03 修改Jenkins用户的密码

    一.Jenkins修改用户密码 Jenkins用户的数据存放在JENKINS_HOME/users目录. 1. 打开忘记密码的用户文件夹,里面就一个文件config.xml.打开并找到<pass ...

  3. Selenium系列之--02 不同浏览器获取Xpath的方法

    一.Chrome浏览器 1.1 获取XPath 1.  使用浏览器打开需测试的网址,然后点击[F12]按钮,打开开发者调试工具: 2.  点击开发者工具中第一行的第一个对话框Elements,这时就看 ...

  4. HDOJ 4455 Substrings 递推+树状数组

    pre[i]第i位数往前走多少位碰到和它同样的数 dp[i]表示长度为i的子串,dp[i]能够由dp[i-1]加上从i到n的pre[i]>i-1的数减去最后一段长度为i-1的断中的不同的数得到. ...

  5. 《Java设计模式》之訪问者模式

    訪问者模式是对象的行为模式.訪问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作须要改动的话,接受这个操作的数据结构则能够保持不变. 分派的概念 变量被声明时的类型叫做变量的静态类 ...

  6. Highcharts报表——让你的网页上图表画的飞起

    Highcharts是一款纯javascript编写的图表库,能够很简单便捷的在Web网站或Web应用中添加交互性的图表,Highcharts目前支持直线图.曲线图.面积图.柱状图.饼图.散点图等多达 ...

  7. 《C++ Primer Plus》学习笔记3

    <C++ Primer Plus>学习笔记3 第8章 函数探幽 ============================================================== ...

  8. NHibernate不支持复杂的linq,就一定要用DataTable这么低级吗

    有些linq,好不容易写出来,正想扬眉吐屁一番,不料用NHibernate一执行,却报错,说是不支持,我靠. 只好捏着鼻子写一大段sql,交给它.这种直接执行SQL的情况,我看我同事写的,全部都是返回 ...

  9. hadoop第一个例子WordCount

    hadoop查看自己空间 http://127.0.0.1:50070/dfshealth.jsp import java.io.IOException; import java.util.Strin ...

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

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