Min_25筛学习笔记

Min_25筛

例题题面

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

题解

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

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

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

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

\[\begin{aligned} \sum_{i=1}^n f(i)&=\sum_{1\leq p \leq n}f(p)+\sum_{i∉prime}f(i)\\ &=\sum_{1\leq p \leq n}f(p)+\sum_{p\leq\sqrt{n} \&p^e\leq n}f(p^e)\sum_{i\leq\frac{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_x\leq \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^e\leq n\&k>x}f(p_k^e)(S(\frac{n}{p_k^e},k)+[e\neq1]) \]

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

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

经典trick

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

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

posted @ 2021-08-04 21:40  FakeDragon  阅读(30)  评论(0编辑  收藏  举报