poj1041(某数阶乘尾数0的个数)

题意很简单这里就不赘述了

-----------------------

这里主要讲一下一些知识点

唯一分解定理,
概念;任意一个大于0的正整数都能被表示成若干个素数的乘积且表示方法是唯一的;整理可以将相同素数的合并;可以得到

公式————n = P1^a1 * P2^a2 * …………* (P1 < P2 < ……Pn);(这就是标准分解式)

但还有一个关于阶乘的分解式

例如;求29阶乘的标准分解式;

不超过29的素数有哪些;2,3,5,7,11,13,17,19,23,29

就这么多了,然后我们要做什么呢,才可以求出29阶乘的标准分解式;就是要求出这些素数的幂是好多;

 

 

2(29!)//让它表示29阶乘的标准分解式中素数2的幂;其余类似;
先解释一下[a]是什么意思,表示小于a的最大整数
2(29!) = [29/2^1]+[29/2^2]+[29/2^3]+[29/2^4]

 

= 14+7+3+1=25;

25就表示29阶乘的分解式中素数2的个数;

 

应该有人有疑问,为什么只加到29/2^4不在继续加呢,这里有什么特殊的,只加到这里。当然有特殊的29/2^4=1;如果继续加也是0啊;因此就加到[29/2^x]==1这里;

 

其余也是这样

以上转自:https://blog.csdn.net/zw1996/article/details/51160847

-------------------------------

其实也可以理解为从n!取出因子5,小于5就不取,得到n/5个因子5,而后数字变为n/5,也是同类型的问题

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
    int t;
    while(~scanf("%d",&t))
    {
        int n;
        for(int i=1;i<=t;i++)
        {
            int ans=0;
            scanf("%d",&n);
            while(n!=0)
            {
                ans+=n/5;
                n=n/5;
            }
            printf("%d\n",ans);
        }
    }




    return 0;
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值