JDOJ 1775: 求N!中0的个数

JDOJ传送门

Description

求N!结果中末尾0的个数

N! = 1 * 2 * 3 ....... N

Input

输入一行,N(0 < N < unsigned INT_MAX)

Output

输出一行,0的个数

Sample Input

5

Sample Output

1

题解:

求\(\prod_{i=1}^{i=n}\)中末尾0的个数,其实就是在求中\(\prod_{i=1}^{i=n}\)能被几个10整除。

因为\(\prod_{i=1}^{i=n}\)是连乘,所以想要乘出来一个10,那么当且仅当一个2和一个5相乘。

我们随便脑补一下,都会发现,\(\prod_{i=1}^{i=n}\)中出现2的几率一定比出现5的几率大得多,也就是说,如果\(\prod_{i=1}^{i=n}\)中有\(n\)个2,\(m\)个5,那么不一定有\(n\)个10,但一定会有\(m\)个10.

所以原题就变成了求\(\prod_{i=1}^{i=n}\)中能拆分出几个5。

得出第一份代码:

#include<cstdio>
#define ll long long
using namespace std;
ll n,ans;
int main()
{
scanf("%lld",&n);
for(int i=1;i<=n;i++)
{
int j=i;
while(j%5==0)
{
ans++;
j/=5;
}
}
printf("%lld",ans);
return 0;
}

正确性可以保证,但是会TLE。

原因是这道题的数据很大。如果这样从1跑到\(N\),再一个个拆分,就一定会爆时间。那么我们开始往优化算法的方面去想。我们发现,一次跑1个5总不会有1次跑很多个5省事。没错,优化暴力枚举的大多数方法都是在原暴力的基础上合并可以一次筛选出来的东西,一次性加一起。

基于这个思想,我们发现,一个数中能拆出多少个5,其实就是能否拆出一个\(5^n\),所以我们只需要枚举判断能否拆出\(5^n\)即可。这样的运行效率会快非常多。

代码:

#include<cstdio>
#include<cmath>
#define ll long long
using namespace std;
ll n,ans,temp;
int main()
{
scanf("%lld",&n);
for(int i=1;i<=n;i++)
{
if(n/pow(5,i)==0)
break;
temp=n/pow(5,i);
ans+=temp;
}
printf("%lld",ans);
return 0;
}

JDOJ 1775: 求N!中0的个数的更多相关文章

  1. 51nod_1003 阶乘后面0的数量(求N!中5的个数,数论)

    题意: n的阶乘后面有多少个0? 6的阶乘 = 1*2*3*4*5*6 = 720,720后面有1个0.   Input 一个数N(1 <= N <= 10^9) OutPut 输出0的数 ...

  2. Acdream1084 寒假安排 求n!中v因子个数

    题目链接:pid=1084">点击打开链接 寒假安排 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 128000/64000 ...

  3. Algorithm --> 求阶乘末尾0的个数

    求阶乘末尾0的个数 (1)给定一个整数N,那么N的阶乘N!末尾有多少个0?比如:N=10,N!=3628800,N!的末尾有2个0. (2)求N!的二进制表示中最低位为1的位置. 第一题 考虑哪些数相 ...

  4. 求bit中1的个数有几种做法

    原文 求bit中1的个数有几种做法: - x & (x - 1) - Hamming weight的经典求法,基于树状累加:http://en.wikipedia.org/wiki/Hammi ...

  5. 求n!末尾0的个数

    题目连接 /* £:离散数学. £:n!中2的个数>5的个数. £:2*5=10: */ #include<cstdio> #include<cstring> #incl ...

  6. 172. Factorial Trailing Zeroes(阶乘中0的个数 数学题)

    Given an integer n, return the number of trailing zeroes in n!. Example 1: Input: 3 Output: 0 Explan ...

  7. 2018年东北农业大学春季校赛 E-wyh的阶乘(求n!的0的个数)

    链接:https://www.nowcoder.com/acm/contest/93/E来源:牛客网 题目描述 这个问题很简单,就是问你n的阶乘末尾有几个0? 输入描述: 输入第一行一个整数T(1&l ...

  8. SPOJ - DISUBSTR 求串中子串的个数

    \(height\)简单应用 #include<iostream> #include<cstdio> #include<cstring> #include<c ...

  9. POJ 1236--Network of Schools【scc缩点构图 &amp;&amp; 求scc入度为0的个数 &amp;&amp; 求最少加几条边使图变成强联通】

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13325   Accepted: 53 ...

随机推荐

  1. c#数组没有Remove方法,转换为list,再使用Remove方法(例如数组 a,b,c 去除b 只剩a c)

    c#数组没有Remove方法,转换为list再移除,因为list自带Remove方法 string   aaa=a,b,c; var array=aaa.Split(',');//   数组 List ...

  2. Nginx 安装与部署配置

    下载 官方网站:https://nginx.org/en/download.html Windows下安装 安装 下载后解压(切记不能含有中文路径!!),文件结构如图(我解压的路径就有中文,记得拷贝放 ...

  3. 安卓模拟器可访问电脑ip配置

    开发的时候,发现安卓模拟器没办法访问调用开发的接口,因为安卓模拟器没有绑定配置hosts,所以需要在模拟器上配置hosts 首先配置环境变量,用户变量的path和系统变量 我的路径 C:\Users\ ...

  4. [算法模版]Prim-完全图最小生成树

    [算法模版]Prim-完全图最小生成树 众所周知,对于常用的Kruskal算法,算法复杂度为\(O(m \log m)\).这在大多数场景下已经够用了.但是如果遇到及其稠密的完全图,Prim算法就能更 ...

  5. SEO-------- 了解

    SEO(Search Engine Optimization) 译为:搜索引擎优化,是一种透过了解搜索引擎的运作规则来调整网站,以及提高目的的网站在有关搜索引擎内的排名方式. 目的:为了让用户更快的搜 ...

  6. ScreenToGif——gif动图工具使用说明

    前言 最近因回复了博客园的某篇博文并留言求推荐制作gif动图的工具,随后一名热心园友向我推荐了ScreenToGif 不试不知道,一试我就喜欢上了这款动图制作工具(再也不用PS来制作了,虽然我也不会2 ...

  7. influxdb安装和学习

    安装 https://docs.docker.com/samples/library/influxdb/ 先启动,创建admin用户 docker run -d --name influxdb -p ...

  8. 微服务通过feign.RequestInterceptor传递参数

    Feign 支持请求拦截器,在发送请求前,可以对发送的模板进行操作,例如设置请求头等属性,自定请求拦截器需要实现 feign.RequestInterceptor 接口,该接口的方法 apply 有参 ...

  9. c# 值类型和引用类型 笔记

    参考以下博文,我这里只是笔记一下,原文会更加详细 c#基础系列1---深入理解值类型和引用类型 堆栈和托管堆c# 值类型和引用类型 红色表示——“这啥?”(真实1个问题引出3个问题) CLR支持的两种 ...

  10. python数据挖掘介绍

    目录 一:什么是数据挖掘 二:数据挖掘的基本任务 三:数据挖掘流程 四:数据挖掘建模工具   在python对数据的处理方式中,数据挖掘和数据分析是两个重要的方式,目的是为了从数据中获取具有科研或者商 ...