前言

学了各种筛子,学会时我重拳出击,三天后我唯唯诺诺。

所以来复健。

线性筛

懂的都懂。

杜教筛

求函数 $f$ 的前缀和:

$$ S(n)=\sum_{i=1}^n f(i) $$

考虑另外一个函数 $g$,使得 $f*g$ 和 $g$ 的前缀和是容易求得的,则:

$$ \sum_{i=1}^n (f*g)(i)=\sum_{i=1}^n \sum_{d|i} f(d)g(\frac{i}{d}) $$

$$ =\sum_{d=1}^n g(d)S(n/d) $$

$$ =g(1)S(n)+\sum_{d=2}^n g(d)S(n/d) $$

因此:

$$ S(n)=\sum_{i=1}^n (f*g)(i) - \sum_{d=2}^n g(d)S(n/d) $$

整除分块,直接做是 $\mathcal{O}(n^{3\over 4})$ 的,预处理 $n^{2\over 3}$ 以内的前缀和可以做到 $\mathcal{O}(n^{2\over 3})$。注意用 unordered_map 记忆化一下。

注意杜教筛实际上并没有运用积性函数特有的性质,所以可以筛非积性函数的前缀和!

例子

1.求 $\mu$ 的前缀和。

显然 $\mu * 1=\varepsilon$,杜教筛。

2.求 $\varphi$ 的前缀和。

显然 $\varphi * 1=\text{Id}$,杜教筛。

3.求 $\sigma_0$ 的前缀和。

显然 $\sigma_0=1*1$,所以 $\sigma_0 * \mu = 1$,杜教筛。$\mu$ 可以一起杜教筛。

$\text{Powerful-Number}$ 筛

考虑求解积性函数 $f$ 的前缀和:

$$ \sum_{i=1}^n f(i) $$

找一个积性函数 $g$ 使得 $\forall p\in\mathbb{P},\ g(p)=f(p)$,且其前缀和是好求的。

考虑 $h=f/g$,这里的除法是狄利克雷除法。则 $f=g*h$。对于 $p\in \mathbb{P}$,有:

$$ f(p)=g(1)h(p)+g(p)h(1)=g(p) $$

显然 $g(1)=h(1)=1$,所以可以得到 $h(p)=0$。也就是 $h$ 在素数位置取值为 $0$。

考虑一个数字 $n=\sum_{i=1}^k p_i^{e_i}$,则 $h(n)=\prod_{i=1}^k h(p_i^{e_i})$,显然当 $h(n)\ne 0$ 的时候,有 $\forall i\in [1,k],\ e_i\ge 2$。

我们称满足上述条件的数字 $n$ 为 $\text{Powerful Number}$。可以证明 $\text{Powerful Number}$ 的个数是 $\mathcal{O}(\sqrt{n})$ 的。

则有:

$$ \sum_{i=1}^n f(i)=\sum_{i=1}^n \sum_{d|i} g(d)h(\dfrac{i}{d}) $$

$$ =\sum_{d=1}^n h(d)\sum_{i=1}^{n/d} g(i) $$

而 $h(d)$ 只在 $d$ 是 $\text{Powerful Number}$ 的时候非 $0$,所以可以变成:

$$ \sum_{d\in \text{PN}\cap [1,n]} h(d)\sum_{i=1}^{n/d}g(i) $$

后面的 $g$ 的前缀和可以 $\mathcal{O}(1)$ 或者杜教筛,前面的 $\text{Powerful Number}$ 可以暴力全部搜出来。需要注意杜教筛筛形如这种 $\left\lfloor\dfrac{n}{i}\right\rfloor$ 的东西的总复杂度都是 $\mathcal{O}(n^{2\over 3})$ 的。

$\text{min25}$ 筛

【学习笔记】min25 筛

标签: 数论, 杜教筛

添加新评论