//408K 375MS G++
#include <cstdio>
#include <cstring>
long long get2FactorNum(long long N) {
long long res = 0;
while(N) {
res += N/2;
N /= 2;
}
return res;
}
long long get5FactorNum(long long N) {
long long res = 0;
while(N) {
res += N/5;
N /= 5;
}
return res;
}
long long caseNum;
int main() {
scanf("%lld", &caseNum);
for (long long i = 0; i < caseNum; i++) {
long long val;
scanf("%lld", &val);
long long Num1 = get2FactorNum(val);
long long Num2 = get5FactorNum(val);
long long res = Num1 > Num2 ? Num2: Num1;
printf("%lld\n", res);
}
}
用到了和3219一样的技法,
题目要求N!最后面0的个数,其实就是求在N<->1的范围内的乘数中,能拼出多少个10, 这个10必然就是最后那一串0之一,
即 N! = X*Y*..*Z*10*10*10...., (前面的X*Y*...Z不可能再拼出*10),而因为10在 因子<=9的情况下 只能是 2*5 == 10,
因此就求出在N!就多少个因子2(F1)和多少个因子5(F2)就可以,取其中最小值, 就是最后能拼出的*10的个数.