UVA884的题解
-
思考背景
既然题目要求 \(n!\) 的质因数个数,又有多组数据,我们为什么要求多次呢?可以使用预处理求解。
所以,思路就来了~
-
思路
假设 \(f_i\) 表示 \(i!\) 中的质因数,那么一个数 \((i-1)!\) 乘以一个数 \(i\) 之后质因数的个数就等于原本的数的质因数个数加当前数的质因数个数,所以我们可以得到预处理方程式 $ f_i = f_{i-1}+cnt(i) $,此处的 \(cnt(i)\) 表示 \(i\) 有多少个质因数。
-
代码
这......
思路都这么清晰了,代码就不用贴了吧!
附上 cnt 函数代码:
int cnt(int n)
{
int s = sqrt(n);
int ret = 0;
for (int i = 2; i <= n && i <= s; i++)
while(n % i == 0)
ret++, n /= i;
if (n != 1)
return ret + 1;
return ret;
}

浙公网安备 33010602011771号