定理:每个大于1 的正整数n都可以被唯一地写成素数的乘积,在乘积中的素因子按照非降序排列。正整数n的分解式n = p1^a1 * p2^a2****pk^ak 称为n的标准分解式,其中p1, p2, ...pk是素数,p1<p2<....pk, 且a1,a2....ak是正整数。
性质1:若n的标准素因子分解表达式为上面所述,设d(n)为n的素因子的个数,则
d(n) = (a1+1) * (a2+1) * *** (ak + 1).
性质2:n!的素因子分解中的素数p的幂为[n/p] + [n/p^2] + [n/p^3] + ........
例题:
n!后面有多少个0 | |||
| |||
description | |||
从输入中读取一个数n,求出n!中末尾0的个数。 | |||
input | |||
输入有若干行。第一行上有一个整数m,指明接下来的数字的个数。然后是m行,每一行包含一个确定的正整数n,1<=n<=1000000000。 | |||
output | |||
对输入行中的每一个数据n,输出一行,其内容是n!中末尾0的个数。 | |||
sample_input | |||
3 3 100 1024 | |||
sample_output | |||
0 24 253 | |||
hint | |||
| |||
source |
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long int LL ;
int main() {
int m;
cin >> m;
while (m --) {
LL n;
cin >> n;
int num = 5;
int res = 0;
while (n /num) {
res += n/num;
num *= 5;
}
cout << res << endl;
}
return 0;
}