hdu1124 Factorial 阶乘末尾0的个数 基础数论

版权声明:点个关注(^-^)V https://blog.csdn.net/weixin_41793113/article/details/89054899

问题描述

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

扫描二维码关注公众号,回复: 5794079 查看本文章

1024

23456

8735373

样本输出

0

14

24

253

5861

2183837

资源

2000年中欧

推荐

艾迪| 我们为您精心挑选了几个类似的问题:   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;
}

猜你喜欢

转载自blog.csdn.net/weixin_41793113/article/details/89054899
今日推荐