问题描述
GSM网络中最重要的部分是所谓的基站收发信台(BTS)。这些收发器形成称为单元的区域(这个术语将名称赋予蜂窝电话),并且每个电话以最强的信号连接到BTS(在一点点简化视图中)。当然,BTS需要引起注意,技术人员需要定期检查其功能。
ACM技术人员最近遇到了一个非常有趣的问题。鉴于要访问的一组BTS,他们需要找到访问所有给定点的最短路径并返回中央公司大楼。程序员花了几个月的时间来研究这个问题,但没有结果。他们无法快速找到解决方案。很长一段时间后,其中一位程序员在一篇会议文章中发现了这个问题。不幸的是,他发现这个问题被称为“旅行推销员问题”而且很难解决。如果我们要访问N个BTS,我们可以按任意顺序访问它们,给我们N!检查的可能性。表示该数字的函数称为阶乘,可以作为乘积1.2.3.4 .... N计算。即使对于相对较小的N,该数字也非常高。
程序员明白他们没有机会解决问题。但由于他们已经从政府获得了研究经费,他们需要继续学习并至少产生一些结果。所以他们开始研究阶乘函数的行为。
例如,它们定义了函数Z.对于任何正整数N,Z(N)是数字N!的十进制形式末尾的零数。他们注意到这个功能永远不会减少。如果我们有两个数字N1 <N2,那么Z(N1)<= Z(N2)。这是因为我们永远不会通过乘以任何正数来“失去”任何尾随零。我们只能得到新的和新的零。函数Z非常有趣,因此我们需要一个能够有效确定其价值的计算机程序。
输入
第一行输入上有一个正整数T. 它代表要遵循的数字数量。然后有T行,每行包含正整数N,1 <= N <= 1000000000。
产量
对于每个数字N,输出包含单个非负整数Z(N)的单个行。
样本输入
6
3
60
100
1024
23456
8735373
样本输出
0
14
24
253
5861
2183837
资源
推荐
艾迪| 我们为您精心挑选了几个类似的问题: 1128 1113 1032 1115 1319
N!末尾的0一定是由2*5产生的。
而且2因子的个数一定比5因子的个数多。
所以只需要求N!的5因子的个数。
用到了一个数论知识:
若p是质数,p<=n,则n!是p的倍数,设p^x是p在n!内的最高幂,则
x=[n/p]+[n/p^2]+[n/p^3]+............;
而且[n/(ab)]=[[n/a]/b]
通俗易懂的说就是2的因子总是比5的因子多,5,15有1个5的因子,但25有2个5的因子,所以不能简单的认为5的倍数只有1个5的因子
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int n,T,temp;
int ans;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
ans = 0;
temp = n/5;
while(temp>0){
ans += temp;
temp/=5;
}
printf("%d\n",ans);
}
return 0;
}