筛法

发布时间 2023-07-28 17:12:37作者: Nityacke

前置知识

积性函数

如果函数\(f(x)\)满足\(\forall x,y\in N_+,\gcd(x,y)=1,f(xy)=f(x)f(y)\),则函数\(f(x)\)为积性函数

如果函数\(f(x)\)满足\(\forall x,y\in N_+,f(xy)=f(x)f(y)\),则函数\(f(x)\)为完全积性函数

Dirichlet 卷积

令\(h(n)=\sum_{d|n}f(d)g(\frac{n}{d})\),则称函数\(h\)是函数\(f\)和\(g\)的 Dirichlet 卷积。

Dirichlet 卷积满足交换律和结合律

两个积性函数的 Dirichlet 卷积也是积性函数

常见的 Dirichlet 卷积:

\[\mu * Id= \varphi\\ \varphi * I=Id\\ \mu * I=\epsilon \]

点乘

定义点乘为:\((A \cdot B)(n)=A(n)B(n)\)

当 \(C\) 为完全积性函数时,\((A\cdot C) * (B\cdot C)=(A * B)\cdot C\)

证明:

\[Ans=\sum_{d|n}A(d)C(d)B(\frac{n}{d})C(\frac{n}{d})\\ =\sum_{d|n}A(d)B(\frac{n}{d})C(d)C(\frac{n}{d})\\ \because C为完全积性函数\\ \therefore Ans=C(n)\sum_{d|n}A(d)B(\frac{n}{d}) \]

常见应用:

\[(\mu \cdot Id_k) * Id_k=(\mu \cdot Id_k)* (I \cdot Id_k)=(\mu * I)\cdot Id_k=\epsilon\\ (\varphi \cdot Id_k) * Id_k=(\varphi \cdot Id_k)* (I \cdot Id_k)=(\varphi * I)\cdot Id_k=Id_{k+1}\\ \]

杜教筛

杜教筛可以用来求函数前缀和

令目标函数为\(f(x),S(n)=\sum_{i=1}^nf(i)\),构造两个函数\(g(x),h(x)\)使得\(h=f * g\)

且\(g,h\)的前缀和可以快速算出

\[\sum_{i=1}^nh(i)=\sum_{i=1}^n\sum_{d|i}f(d)g(\frac{n}{d})\\ =\sum_{d=1}^n g(d)\sum_{i=1}^\frac{n}{d}f(i)\\ =\sum_{d=1}^n g(d) S(\frac{n}{d})\\ \therefore S(n)=\frac{\sum_{i=1}^nh(i)-\sum_{d=2}^n g(d)S(\frac{n}{d})}{g(1)} \]

递归处理,预处理到 \(S(n^{\frac{2}{3}})\),时间复杂度为\(O(n^{\frac{2}{3}})\)

例子

一:

求\(S(n)=\sum_{i=1}^n \mu(i)\)

\[\because \mu * I = \epsilon\\ \therefore S(n)=1-\sum_{d=2}^n d\times S(\frac{n}{d}) \]

二:

求\(S(n)=\sum_{i=1}^n \varphi(i)\)

\[\because \varphi * I=Id\\ \therefore S(n)=\sum_{i=1}^n i-\sum_{d=2}^n S(\frac{n}{d}) \]

三:

求\(S(n)=\sum_{i=1}^n i\varphi(i)\)

\[\because (Id \cdot \varphi) * Id= Id_2\\ \therefore S(n)=\sum_{i=1}^n i^2-\sum_{d=2}^n d\times S(\frac n d) \]

Min_25筛

Min_25筛用来求一类特殊积性函数的前缀和,时间复杂度为\(O(n^{1-\epsilon})\)或者\(O(\frac{n^\frac 3 4}{\log n})\)

要求:\(\forall p\in P,c\in N_+,f(p^c)\)可以快速求值

模板

\[令L(n)为n的最小质因子,p_i为第i个质数\\ \sum_{i=1}^n f(i)=\sum_{p\in P}f(p)+\sum_{d\notin P}f(d)\\ \because 不超过 n 的合数一定有一个不大于 \sqrt n的质因子\\ \therefore \sum_{i=1}^n f(i)=\sum_{p\in P}f(p)+\sum_{p\in P \le \sqrt n\&p^e\le n}f(p^e)(\sum_{d=2\&L(d)>p}^\frac{n}{p^e}f(d))\\ 设计一个完全积性函数f',且f'与f在质数处取值相同\\ 令g(n,j)=\sum_{i=1}^n[i\in P||L(i)>p_j]f'(i),x为满足p_x\le \sqrt n 的最大值\\ 则\sum_{p\in P}^nf(p)=g(n,x)\\ 考虑递推,g(n,j-1)\to g(n,j)\\ p_j^2>n,没有多余贡献,g(n,j)=g(n,j-1)\\ p_j^2\le n 提出p_j,贡献为f'(p_j)(g(\frac{n}{p_j},j-1)-\sum_{i=1}^{j-1}f'(p_i))\\ g(\frac{n}{p_j},j-1)-\sum_{i=1}^{j-1}f'(p_i)是含有p_j的合数的贡献\\ 考虑令S(n,j)为\sum_{L(i)>p_j}f(i)\\ 则:S(n,j)=g(n,j)-\sum_{i=1}^jf(i)+\sum_{k>j\&p^e\le n}f(p_k^e)(S(\frac{n}{p_k^e},k)+[e>1]) \\ \\ 答案就是S(n,0)+f(1) \]

注意:第一维的下标始终是\(\frac{n}{x}\),所以可以将空间复杂度压到\(O(\sqrt n)\)

Powerful Number筛

Powerful Number

若正整数\(x\)满足它所有质因子的幂次都大于一,则\(x\)是一个\(\text{Powerful Number}\)

性质:
任何一个\(\text{Powerful Number}\)都可以表示为\(a^2b^3\)

\([1,n]\)之间的\(\text{Powerful Number}\)有\(O(\sqrt n)\)个

证明:个数是

\[\int_{i=1}^{\sqrt n} \sqrt[3]{\frac{n}{x^2}}dx=O(\sqrt n) \]

Powerful Number筛

要求\(\sum_{i=1}^nf(i)\)

构造积性函数\(g\)满足:

  • \(g\)是积性函数
  • \(g\)容易求前缀和(有可能与杜教筛,min_25筛有关)
  • \(\forall p\in P,g(p)=f(p)\)

令\(h=f/g\),这里是 Dirichlet 除法,即\(f= g * h\)

所以\(h\)也为积性函数\(h(1)\)

\[\forall p\in P,f(p)=g(1)h(p)+h(1)g(p)=h(p)+g(p)\\ \therefore h(p)=0\\ \sum_{i=1}^nf(i)=\sum_{i=1}^n\sum_{d|i}h(d)g(\frac{i}{d})\\ =\sum_{i=1}^n h(i)\sum_{d=1}^\frac{n}{i}g(i) \]

因为\(h\)为积性函数,所以只有\(\text{Powerful Number}\)的\(h\)不为\(0\)

下一个问题是如何得到\(h(p^c)\)

  • 1、通过\(f=h * g\)算出\(h\),\(h(p^c)=f(p^c)-\sum_{i=1}^c f(p^i)h(p^{c-i})\)
  • 2、找到\(h(p^c),p,c\)的关系

然后\(dfs\)找到所有\(PN\)数就行了