Poj 1401 Factorial(计算N!尾数0的个数——质因数分解)
一、Description
signal (in a little simplified view). Of course, BTSes need some attention and technicians need to check their function periodically.
ACM technicians faced a very interesting problem recently. Given a set of BTSes to visit, they needed to find the shortest path to visit all of the given points and return back to the central company building. Programmers have spent several months studying
this problem but with no results. They were unable to find the solution fast enough. After a long time, one of the programmers found this problem in a conference article. Unfortunately, he found that the problem is so called "Travelling Salesman Problem" and
it is very hard to solve. If we have N BTSes to be visited, we can visit them in any order, giving us N! possibilities to examine. The function expressing that number is called factorial and can be computed as a product 1.2.3.4....N. The number is very high
even for a relatively small N.
The programmers understood they had no chance to solve the problem. But because they have already received the research grant from the government, they needed to continue with their studies and produce at least some results. So they started to study behaviour
of the factorial function.
For example, they defined the function Z. For any positive integer N, Z(N) is the number of zeros at the end of the decimal form of number N!. They noticed that this function never decreases. If we have two numbers N1 < N2, then Z(N1) <= Z(N2). It is because
we can never "lose" any trailing zero by multiplying by any positive number. We can only get new and new zeros. The function Z is very interesting, so we need a computer program that can determine its value efficiently.
Input
Output
二、题解
这个题目看了很久还是没看懂,后来发现要求阶乘后的数尾数中0的个数。于是就傻逼的算阶乘,这个根本没法算,数太大了,会发生溢出的。于是就想到要有0就只有1 * 10, 2 * 5而10也可以化成2 * 5,而显然能被5整除的个数远小于能被2整除的个数,于是就计算1~60中能被5整除的个数,后来发现还是不对,结果要比答案少。后来发现,原来25 * 4=100,能增加两个0,而25=5 * 5,能分开来乘。所以,所以在<N的数里面,能分出多少个5来,末尾就多少个0。
所以应该这样计算:
100/5=20->20/5=4
那么20+4=24
1024/5=204 -> 204/5=40 -> 40/5=8 -> 8/5=1
那么204+40+8+1=253
这里的严谨分析应该是进行质因数分解N ! =(2^x) * (3^y) * (5^z)...,由于10=2*5,所以M只跟x和z有关,每一对2和5相乘可以得到一个10,于是M=min(x,z)。不难看出x大于z,因为能被2整除的数出现的频率能被5整除的数高得多,所以把公式简化为M=z.
根据上面的分析,只要计算出Z的值,就可以得到N!末尾0的个数了。
三、java代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n,m,out;
n=sc.nextInt();
while(n!=0){
m=sc.nextInt();
out=0;
while (m>=5){
m/=5;
out+=m;
}
System.out.println(out);
n--;
}
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
Poj 1401 Factorial(计算N!尾数0的个数——质因数分解)的更多相关文章
- 【CodeChef】Factorial(n!末尾0的个数)
The most important part of a GSM network is so called Base Transceiver Station (BTS). These transcei ...
- POJ 1401 Factorial
题意:求一个数的阶乘最后边有几个0. 解法:如果有0说明这个数含有2和5这两个因子,对于一个阶乘来说因子2的数量一定比5的数量多,所以只要算有几个5就可以了,依次算5的个数,25的个数,125的个数… ...
- n阶乘 尾数0的个数
class Solution {public: int trailingZeroes(int n) { if(n<=0) return 0; int i=0; ...
- ACM: POJ 1401 Factorial-数论专题-水题
POJ 1401 Factorial Time Limit:1500MS Memory Limit:65536KB 64bit IO Format:%lld & %llu ...
- 计算阶乘n!末尾0的个数
一.问题描述 给定一个正整数n,请计算n的阶乘n!末尾所含有“0”的个数.例如: 5!=120,其末尾所含有的“0”的个数为1: 10!= 3628800,其末尾所含有的“0”的个数为2: 20!= ...
- 计算n的阶乘(n!)末尾0的个数
题目: 给定一个正整数n,请计算n的阶乘n!末尾所含有“0”的个数. 举例: 5!=120,其末尾所含有的“0”的个数为1: 10!= 3628800,其末尾所含有的“0”的个数为2: 20!= 24 ...
- 扩展1000!(n!)的尾数零的个数
#include <stdio.h> #include <malloc.h> //计算1000!尾数零的个数 //扩展n!的尾数零的个数 //2^a * 5^b //obvio ...
- POJ 1401:Factorial 求一个数阶乘的末尾0的个数
Factorial Time Limit: 1500MS Memory Limit: 65536K Total Submissions: 15137 Accepted: 9349 Descri ...
- pku 1401 Factorial 算数基本定理 && 51nod 1003 阶乘后面0的数量
链接:http://poj.org/problem?id=1401 题意:计算N!的末尾0的个数 思路:算数基本定理 有0,分解为2*5,寻找2*5的对数,2的因子个数大于5,转化为寻找因子5的个数. ...
随机推荐
- [IOI2018]组合动作
IOI2018 组合动作 UOJ 首先显然可以两次试出首字母 考虑增量构造 假设首字母为A,且已经试出前i个字母得到的串s 我们考虑press这样一个串s+BB+s+BX+s+BY+s+XA 首先这个 ...
- HDU - 5550 Game Rooms 【DP+前缀和】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5550 题意 一撞大楼有N层楼,然后每层楼都有一部分人喜欢打羽毛球,一部分人喜欢打乒乓球 但是每层楼只能 ...
- Scala window下安装
第一步:Java 设置 检测方法前文已说明,这里不再描述. 如果还为安装,可以参考我们的Java 开发环境配置. 接下来,我们可以从 Scala 官网地址 http://www.scala-lang. ...
- 【leetcode刷题笔记】Unique Paths II
Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How m ...
- jQuery横向手风琴
在线演示 本地下载
- hd acm1008
Problem Description The highest building in our city has only one elevator. A request list is made u ...
- android OTG【转】
本文转载自:http://blog.csdn.net/xubin341719/article/details/7707056 一.OTG的概念 OTG是On-The-Go的缩写,是近年发展起来的技术, ...
- java打包命令
(1)首先,必须保证java的所有路径都设置好,在dos提示符下输入jar -help 出现C:\Documents and Settings\dly>jar -help 非法选项:h 用法:j ...
- neutron VPC
The goal of this document is to provide an umbrella blueprint defining how to add support for VPC in ...
- Spark- 流量日志分析
日志生成 package zx.Utils import java.io.{File, FileWriter} import java.util.Calendar import org.apache. ...