【学习笔记】杜教筛

前置知识:狄利克雷卷积

杜教筛

给定正整数 \(n(n\le 2^{31})\),求 \(\sum\limits_{i=1}^nf(i)\),其中 \(f\) 为一积性函数。

\(S(n)=\sum\limits_{i=1}^nf(i)\)

首先,我们找一个神奇的函数 \(g\),使得 \(\sum\limits_{i=1}^n(f*g)(i)\)\(\sum\limits_{i=1}^ng(i)\) 都能快速求解。

然后我们需要证明 \(\sum\limits_{i=1}^n(f*g)(i)=\sum\limits_{i=1}^ng(i)S(\left\lfloor\dfrac{n}{i}\right\rfloor)\)

\(\sum\limits_{i=1}^n(f*g)(i)\\=\sum\limits_{i=1}^n\sum\limits_{d\mid i}g(d)f(\dfrac{i}{d})\\=\sum\limits_{d=1}^n\sum\limits_{i=1}^n[d\mid i]g(d)f(\dfrac{i}{d})\\=\sum\limits_{d=1}^ng(d)\sum\limits_{i=1}^n[d\mid i]f(\dfrac{i}{d})\\=\sum\limits_{d=1}^ng(d)\sum\limits_{i=1}^{\left\lfloor\frac{n}{d}\right\rfloor}f(i)\)

(其中这一步是将枚举 \(i\) 变为枚举 \(\dfrac{i}{d}\),原 \(i\) 变为 \(id\)

\(=\sum\limits_{i=1}^ng(i)S(\left\lfloor\dfrac{n}{i}\right\rfloor)\)

证毕。

\(\sum\limits_{i=1}^n(f*g)(i)=\sum\limits_{i=1}^ng(i)S(\left\lfloor\dfrac{n}{i}\right\rfloor)\\\sum\limits_{i=1}^n(f*g)(i)=g(1)S(n)+\sum\limits_{i=2}^ng(i)S(\left\lfloor\dfrac{n}{i}\right\rfloor)\\g(1)S(n)=\sum\limits_{i=1}^n(f*g)(i)-\sum\limits_{i=2}^ng(i)S(\left\lfloor\dfrac{n}{i}\right\rfloor)\\S(n)=\dfrac{\sum\limits_{i=1}^n(f*g)(i)-\sum\limits_{i=2}^ng(i)S(\left\lfloor\dfrac{n}{i}\right\rfloor)}{g(1)}\)

于是 \(S(n)\) 就能用整除分块递归求解了,并用 maptr1 :: unordered_map 记忆化。

但此时时间复杂度为 \(\mathcal{O}(n^{\frac{3}{4}})\)证明),还是有点高,怎么办?

我们可以预处理出 \(1..k\)\(S(n)\) 值(线性筛 + 前缀和),当 \(n\le k\) 时直接返回。

\(k=n^\frac{2}{3}\) 时时间复杂度较优,为 \(\mathcal{O}(n^\frac{2}{3})\)

应用

  1. 莫比乌斯函数

\(g=1\),此时有 \(\mu*1=\epsilon\)

\(S(n)=\dfrac{\sum\limits_{i=1}^n(f*g)(i)-\sum\limits_{i=2}^ng(i)S(\left\lfloor\dfrac{n}{i}\right\rfloor)}{g(1)}\\=\sum\limits_{i=1}^n\epsilon(i)-\sum\limits_{i=2}^n1(i)S(\left\lfloor\dfrac{n}{i}\right\rfloor)\\=1-\sum\limits_{i=2}^nS(\left\lfloor\dfrac{n}{i}\right\rfloor)\)

  1. 欧拉函数

\(g=1\),此时有 \(\varphi*1=id\)

\(S(n)=\dfrac{\sum\limits_{i=1}^n(f*g)(i)-\sum\limits_{i=2}^ng(i)S(\left\lfloor\dfrac{n}{i}\right\rfloor)}{g(1)}\\=\sum\limits_{i=1}^nid(i)-\sum\limits_{i=2}^nS(\left\lfloor\dfrac{n}{i}\right\rfloor)\\=\dfrac{n(n+1)}{2}-\sum\limits_{i=2}^nS(\left\lfloor\dfrac{n}{i}\right\rfloor)\)

posted @ 2021-03-26 10:20  EverlastingEternity  阅读(38)  评论(0编辑  收藏  举报