关于筛法,最近看到了很多,也尝试的学了一些。总的来说可以分为线性筛和亚线性筛。
所谓线性筛,就是可以在线性时间复杂度内求解的筛法。而亚线性筛则是时间复杂度更为优秀的筛法,通常时间复杂度可以达到小于线性时间,可以解决1e8~1e11范围内的问题。
关于亚线性筛,之前已经写过了杜教筛,但是个人感觉用到的地方确实不太多,而且比较难构造。而这次要讲的Min25筛则相对要求的条件更低,而且不需要构造新的数论函数。另外还有一种亚线性筛叫洲阁筛,与Min25筛类似。
首先要弄清楚Min25筛具体用在什么地方,有什么使用条件。一般来说,它可以求大部分的积性函数的和,即形如:
要求的条件是要能够用多项式表示,而且要能够快速计算。
Min25筛的大致思想,就是把这个结果分为两个部分(准确来说是三个部分),一个是i为质数的和,一个是i为合数的和,再加上i为1的函数值。那么,我们首先看如果求这个i为质数部分的和ans1。我们不妨设
也即g(n,j)表示从1累加到n的F(i),其中的i要满足要么i自己是质数,要么i的最小质因子大于第j个质数。这样,显然有ans1等于g(n,|P|)。那么我们考虑如何去计算这个g(n,j)。