SparseFactorial

作者:马龙

关键词:数学 同余 中国剩余定理

题目简述

定义“稀疏阶乘函数”,求在中有多少个正整数满足的倍数。

分析

我们可以将题目中的要求转化为求中满足个数。不难发现,仅与的最大值有关,且假如,那么就有。因此,我们可以对所有的按模的余数进行分类,并计算出每一类中满足条件的下界是多少,就能得到答案了。设这个下界为

此外,对于一组满足,不难利用时间内构造出正确的。因此,现在的问题是,给定某个质数幂,求出的值。

算法一

考虑最直接的做法。对于每个中的,我们枚举,计算出的数量并累加,直到不少于就等于此时的。由于的,总复杂度

算法二

算法一的复杂度太高了,需要优化。注意到的范围非常小,因此假如我们只枚举中包含至少一个,复杂度就会降低许多。因此,我们先枚举,并维护一个表示到目前为止所有的总个数;然后再枚举满足的所有,这样的就只有个了,单次求解的复杂度降至

算法三

从算法二中,我们发现,每个所影响的为周期循环,所影响的是相同的;而每次每个受影响的至少会加一,因此有用的只有个。与算法二结合后,复杂度降至,由于,总复杂度,可以通过本题。

results matching ""

    No results matching ""