Min_25筛学习笔记

Min_25筛

例题题面

(f(x))是一个积性函数,且(f(p^k)=p^k(p^k-1)),求(sum_{i=1}^n f(i)),其中(nleq 10^{10})

题解

Min_25筛的基本思想:积性函数(f(p^k))能表示成一个关于(p^k)的多项式,于是可以对每一项分别去处理。在此题中是一个二次的多项式。所以说,我们接下来的过程其实是在求这样一个式子:

[sum_{i=1}^nf(i),f(p^e)=(p^e)^k ]

其中的(f)(k)均有别于上面的(f)(k)

我们考虑将原式分成两部分:

[egin{aligned} sum_{i=1}^n f(i)&=sum_{1leq p leq n}f(p)+sum_{i∉prime}f(i)\ &=sum_{1leq p leq n}f(p)+sum_{pleqsqrt{n} &p^eleq n}f(p^e)sum_{ileqfrac{n}{p^e}&minp>p}f(i) end{aligned} ]

其中前面那部分是质数,后面那部分是枚举合数。

我们先考虑第一部分怎么解决。

Part1

我们考虑一个dp:设(g(n,j)),满足:

[g(n,j)=sum_i[i∈prime||minp>p_j]i^k ]

其中显然的,(i^k)是一个完全积性函数。

在此题中,明显的,(k)(1)(2)

接下来考虑转移,我们可以发现,如果从(g(n,j-1))转移到(g(n,j)),我们就要删掉原本最小质因子是(p_{j})的数,那么就有下面的转移:

[g(n,j)=g(n,j-1)-p_j^k(g(frac{n}{p_j},j-1)-g(p_{j-1},j-1)) ]

其中前面那个就是最小质因子是(p_j)的所有数和质数,后面那个就是为了抵消掉质数。

不难发现,(g(p_{j-1},j-1))即为前(j-1)个质数的(k)次方和,这个可以筛法搞一下,记为(sp_{j-1})

于是,我们就能求出(1)~(n)中所有质数的k次方和,即为(g(n,x)),其中(x)是满足(p_xleq sqrt n)的最大的(x)。为方便记为(g(n))

但是你会发现一个事儿,(n)太大,没办法把每一个(g(n))都存下来。但是我们发现,我们需要的(n)都是由(n)除以某个数得到的,不难发现这样的值最多只有(O(sqrt n))种,于是就可以存下来了。

Part2

类似地考虑dp,设(S(n,x))(1)(n)中所有最小质因子大于(p_x)的数的函数(即(f))值之和,那么答案就是(S(n,0)+1)。(1为(f(1))的值)

(S)分成两部分,一部分为质数,一部分为合数,则有:

[S(n,x)=g(n)-sp_x+sum_{p_k^eleq n&k>x}f(p_k^e)(S(frac{n}{p_k^e},k)+[e eq1]) ]

前面那一半就是质数,后面的和式就是合数了。这个类似于上面(g)那条式子。后面那个(e eq1)是因为(e=1)的时候在质数里算过了。

这个式子就可以递归去处理了。

经典trick

因为在处理(g)的时候,减去(p_j^k(g(frac{n}{p_j},j-1)-g(p_{j-1},j-1)))意义即为将最小质因数为(p_j)的合数的函数值给去掉,所以这一部分的和就是全部合数的函数值的和。

例:【51NOD1847】奇怪的数学题

原文地址:https://www.cnblogs.com/youddjxd/p/15100914.html