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. 【day08】PHP

    一. 函数 1.函数:封装的,可以重复使用的完成特定功能的代码段. 2.函数分类:   (1)系统函数   (2)自定义函数 3.自定义函数   (1)格式   function 函数名称([参数[= ...

  2. HTML连载40-盒子宽度和高度的练习、box-sizing属性

    一.判断方法 1.判断是否元素宽高为200的盒子 只需要看:边框+内边距+内容宽度/内容高度的值是否等于200 2.判断是否内容宽高为100的盒子 只需要看:width和heght的值是否等于100 ...

  3. 在Windows下的virtualenv中搭建Flask+MySQLDb开发环境

    virtualenv和Flask的安装前面已经介绍过了,这里主要讲如何在venv中安装MySQL 安装MySQLdb 下载MySQL-python-1.2.3.win32-py2.7.exe并安装. ...

  4. python threading ThreadPoolExecutor源码解析

    future: 未来对象,或task的返回容器 1. 当submit后: def submit(self, fn, *args, **kwargs): with self._shutdown_lock ...

  5. linux bash 的基础语法

    示例均来自网络,附带有原始链接地址,自己练习整理发出,均测试可用 linux shell 基本语法 - 周学伟 - 博客园 https://www.cnblogs.com/zxouxuewei/p/6 ...

  6. Kubernetes 部署集群内部DNS服务

    Kubernetes 部署集群内部DNS服务 部署官网:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns/ ...

  7. FusionInsight大数据开发--HBase应用开发

    HBase应用开发 HBase的定义 HBase是一个高可靠.高性能.面向列.可伸缩的分布式存储系统. 适合于存储大表数据,可以达到实时级别. 利用Hadoop HDFS 作为其文件存储系统,提供实时 ...

  8. C# 实现 奇数偶数排序,奇数在前,偶数在后

    public static void SortByOddAndEven(int []arr) { for (int i = 0; i < arr.Length; i++) { for (int ...

  9. Microsoft.Windows.Controls.Ribbon.RibbonWindow 碰到 AvalonDock出现的诡异现象

    部分一 14年底进入目前公司时,领导准备开发一款新软件平台以取代原有平台.原平台采用C++Build开发界面(window c/s客户端) .Visual Studio(封装dll模块).过完年,领导 ...

  10. C# 灵活切换开发/测试/生成环境web.config

    web.config <configuration> <connectionStrings configSource="config\Sit.db.config" ...