题意很简单这里就不赘述了
-----------------------
这里主要讲一下一些知识点
唯一分解定理,
概念;任意一个大于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;
}