SparseFactorial
作者:马龙
关键词:数学 同余 中国剩余定理
题目简述
定义“稀疏阶乘函数”,求在中有多少个正整数满足是的倍数。
分析
我们可以将题目中的要求转化为求中满足的个数。不难发现,仅与和的最大值有关,且假如,那么就有。因此,我们可以对所有的按模的余数进行分类,并计算出每一类中满足条件的下界是多少,就能得到答案了。设这个下界为。
此外,对于一组满足的和,不难利用及在时间内构造出正确的。因此,现在的问题是,给定某个质数幂,求出的值。
算法一
考虑最直接的做法。对于每个中的,我们枚举,计算出中的数量并累加,直到不少于;就等于此时的。由于是的,总复杂度。
算法二
算法一的复杂度太高了,需要优化。注意到的范围非常小,因此假如我们只枚举中包含至少一个的和,复杂度就会降低许多。因此,我们先枚举,并维护一个表示到目前为止所有中的总个数;然后再枚举满足的所有,这样的就只有个了,单次求解的复杂度降至。
算法三
从算法二中,我们发现,每个所影响的以为周期循环,与所影响的是相同的;而每次每个受影响的的至少会加一,因此有用的只有个。与算法二结合后,复杂度降至,由于,总复杂度,可以通过本题。