杜教筛入门
前置知识
迪利克雷卷积(*):
先介绍三个重要的函数:
-
元函数 ϵ ( n ) = [ n = = 1 ] \epsilon(n) = [n == 1] ϵ(n)=[n==1]
原函数可以看成是迪利克雷卷积里的单位元,即 ( ϵ ∗ f ) ( n ) = f ( n ) (\epsilon * f)(n) = f(n) (ϵ∗f)(n)=f(n),
证明: ( ϵ ∗ f ) ( n ) = ∑ d ∣ n ϵ ( d ) f ( n d ) = ϵ ( 1 ) f ( n ) = f ( n ) (\epsilon * f)(n) = \sum_{d \mid n} \epsilon(d) f(\frac{n}{d}) = \epsilon(1)f(n) = f(n) (ϵ∗f)(n)=∑d∣nϵ(d)f(dn)=ϵ(1)f(n)=f(n)
-
恒等函数 I ( n ) = 1 I(n) = 1 I(n)=1,通俗来讲就是其值恒为1
-
单位函数 i d ( n ) = n id(n) = n id(n)=n
卷积的定义: ( f ∗ g ) ( n ) = ∑ d ∣ n f ( d ) g ( n d ) (f*g)(n) = \sum_{d \mid n} f(d)g(\frac{n}{d}) (f∗g)(n)=∑d∣nf(d)g(dn)
并且这个式子是满足:交换律,结合律,分配律的。
与莫比乌斯函数有关的卷积:
∑ d ∣ n μ ( d ) = [ n = = 1 ] \sum_{d \mid n} \mu(d) = [n == 1] ∑d∣nμ(d)=[n==1]
写成卷积也就是 ( I ∗ μ ) ( n ) = ϵ ( n ) = [ n = = 1 ] (I * \mu)(n) = \epsilon(n) = [n == 1] (I∗μ)(n)=ϵ(n)=[n==1]。
与欧拉函数有关的卷积:
∑ d ∣ n ϕ ( d ) = n \sum_{d \mid n} \phi(d) = n ∑d∣nϕ(d)=n
写成卷积就是 ( I ∗ ϕ ) ( n ) = i d ( n ) (I * \phi)(n) = id(n) (I∗ϕ)(n)=id(n)。
正式开始了
所谓杜教筛就是可以在 n 2 3 n ^ \frac{2}{3} n32的时间复杂度内算出积性函数的浅醉和来,所以当数据 ≥ 1 e 8 \geq 1e8 ≥1e8的时候就只能用杜教筛了。
假设有积性函数 f ( n ) f(n) f(n),我们要求 S ( n ) = ∑ i = 1 n f ( i ) , n ≤ 1 e 10 S(n) = \sum\limits_{i = 1} ^{n}f(i),n \leq 1e10 S(n)=i=1∑nf(i),n≤1e10。
根据迪利克雷卷积,我们引入一个新的积性函数
g
(
n
)
g(n)
g(n),
F
(
n
)
=
(
g
∗
f
)
(
n
)
F(n) = (g * f)(n)
F(n)=(g∗f)(n)
∑
i
=
1
n
F
(
i
)
=
∑
i
=
1
n
(
g
∗
f
)
(
i
)
=
∑
i
=
1
n
∑
d
∣
i
g
(
d
)
f
(
i
d
)
=
∑
d
=
1
n
g
(
d
)
∑
d
∣
i
f
(
i
d
)
=
∑
d
=
1
n
g
(
d
)
∑
i
=
1
n
d
f
(
i
)
=
∑
d
=
1
n
g
(
d
)
S
(
n
d
)
\sum_{i = 1} ^{n} F(i) = \sum_{i = 1} ^{n} (g * f)(i) = \sum_{i = 1} ^{n} \sum_{d \mid i} g(d)f(\frac{i}{d})\\ = \sum_{d = 1} ^{n} g(d) \sum_{d \mid i} f(\frac{i}{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})\\
i=1∑nF(i)=i=1∑n(g∗f)(i)=i=1∑nd∣i∑g(d)f(di)=d=1∑ng(d)d∣i∑f(di)=d=1∑ng(d)i=1∑dnf(i)=d=1∑ng(d)S(dn)
所以有
∑
i
=
1
n
F
(
i
)
=
g
(
1
)
S
(
n
)
+
∑
d
=
2
n
g
(
d
)
S
(
n
d
)
\sum\limits_{i = 1} ^{n} F(i) = g(1)S(n) + \sum_{d = 2} ^{n} g(d) S(\frac{n}{d})
i=1∑nF(i)=g(1)S(n)+∑d=2ng(d)S(dn)
积性函数的定义有 g ( 1 ) = 1 g(1) = 1 g(1)=1,所以接下来
S ( n ) = ∑ i = 1 n F ( i ) − ∑ d = 2 n g ( d ) S ( n d ) S(n) = \sum\limits_{i = 1} ^{n} F(i) - \sum\limits_{d = 2} ^{n}g(d)S(\frac{n}{d}) S(n)=i=1∑nF(i)−d=2∑ng(d)S(dn)
如果我们能够较快速的计算出 ∑ i = 1 n ( g ∗ f ) ( i ) \sum\limits_{i = 1} ^{n} (g * f)(i) i=1∑n(g∗f)(i)这个问题就可以通过数论分块很好的解决了,当然在次之前我们还得预先筛选出前 n 2 3 n ^{\frac{2}{3}} n32的前缀和来,然后再通过记忆化搜索去得到答案。
几个例子
一、求 S ( n ) = ∑ i = 1 n μ ( i ) S(n) = \sum\limits_{i = 1} ^{n} \mu(i) S(n)=i=1∑nμ(i)
我们先套用上面的式子 S ( n ) = ∑ i = 1 n g ∗ μ − ∑ d = 2 n g ( d ) S ( n d ) S(n) = \sum\limits_{i = 1} ^{n} g * \mu - \sum\limits_{d = 2} ^{n}g(d)S(\frac{n}{d}) S(n)=i=1∑ng∗μ−d=2∑ng(d)S(dn)
我们考虑到 I ∗ μ = ϵ I * \mu = \epsilon I∗μ=ϵ,于是我们得到 S ( n ) = ∑ i = 1 n ϵ − ∑ d = 2 n S ( n d ) = 1 − ∑ d = 2 n S ( n d ) S(n) = \sum\limits_{i = 1} ^{n}\epsilon - \sum\limits_{d = 2} ^{n} S(\frac{n}{d}) = 1 - \sum\limits_{d = 2} ^{n} S(\frac{n}{d}) S(n)=i=1∑nϵ−d=2∑nS(dn)=1−d=2∑nS(dn)
于是我们就完美解决了这个问题。
二、求 S ( n ) = ∑ i = 1 n i μ ( i ) S(n) = \sum\limits_{i = 1} ^{n} i \mu(i) S(n)=i=1∑niμ(i)
上面式子按照套路模板写下来 S ( n ) = ∑ i = 1 n g ∗ μ ∗ i d − ∑ d = 2 n g ( d ) S ( n d ) S(n) = \sum\limits_{i = 1} ^{n} g * \mu *id - \sum\limits_{d = 2} ^{n}g(d)S(\frac{n}{d}) S(n)=i=1∑ng∗μ∗id−d=2∑ng(d)S(dn)
同样的有 μ ∗ I = ϵ , ϵ ∗ i d = i d \mu * I = \epsilon,\epsilon *id = id μ∗I=ϵ,ϵ∗id=id,
所以我们得到 S ( n ) = ∑ i = 1 n i − ∑ d = 2 n S ( n d ) S(n) = \sum\limits_{i = 1} ^{n}i - \sum\limits_{d = 2} ^{n}S(\frac{n}{d}) S(n)=i=1∑ni−d=2∑nS(dn)
貌似推得很有道理,所以我们错在哪?
事实上我们模板都抄错了 i μ ( i ) i \mu(i) iμ(i)这东西显然不是迪利克雷卷积,,,
我们设 f ( n ) = n μ ( n ) f(n) = n \mu(n) f(n)=nμ(n),所以 g ∗ f = ∑ d ∣ n f ( d ) g ( n d ) = ∑ d ∣ n d μ ( d ) g ( n d ) g * f = \sum_{d \mid n} f(d) g(\frac{n}{d}) = \sum_{d \mid n} d \mu(d) g(\frac{n}{d}) g∗f=∑d∣nf(d)g(dn)=∑d∣ndμ(d)g(dn)
容易想到 ∑ d ∣ n μ ( d ) = [ n = = 1 ] \sum_{d \mid n} \mu(d) = [n == 1] ∑d∣nμ(d)=[n==1],所以从这点出发我们考虑 d g ( n d ) μ ( d ) d g(\frac{n}{d}) \mu(d) dg(dn)μ(d)如何得到含有 μ ( d ) \mu(d) μ(d)的形式。
显然,通过观察如果我们让 g ( n ) = n g(n) = n g(n)=n,上式就有 d g ( n d ) μ ( d ) = d n d μ ( d ) = n μ ( d ) d g(\frac{n}{d}) \mu(d) = d \frac{n}{d} \mu(d) = n\mu(d) dg(dn)μ(d)=ddnμ(d)=nμ(d)
带入原式子就变成了 S ( n ) = ∑ i = 1 n ∑ d ∣ i i μ ( d ) − ∑ d = 2 n d S ( n d ) = ∑ i = 1 n i ∑ d ∣ i μ ( d ) − ∑ d = 2 n d S ( n d ) = ∑ i = 1 n i ( i = = 1 ) − ∑ d = 2 n d S ( n d ) S(n) = \sum\limits_{i = 1} ^{n} \sum\limits_{d \mid i}i \mu(d) - \sum\limits_{d = 2} ^{n}d S(\frac{n}{d}) = \sum\limits_{i = 1} ^{n} i\sum\limits_{d \mid i}\mu(d) - \sum\limits_{d = 2} ^{n}d S(\frac{n}{d}) = \sum\limits_{i = 1} ^{n} i(i == 1) - \sum\limits_{d = 2} ^{n}d S(\frac{n}{d}) S(n)=i=1∑nd∣i∑iμ(d)−d=2∑ndS(dn)=i=1∑nid∣i∑μ(d)−d=2∑ndS(dn)=i=1∑ni(i==1)−d=2∑ndS(dn)
由此我们成功推出 S ( n ) = 1 − ∑ d = 2 n d S ( n d ) S(n) = 1 - \sum\limits_{d = 2} ^{n} d S(\frac{n}{d}) S(n)=1−d=2∑ndS(dn)。
三、求 S ( n ) = ∑ i = 1 n ϕ ( i ) S(n) = \sum\limits_{i = 1} ^{n} \phi(i) S(n)=i=1∑nϕ(i)
直接套就行了这个 S ( n ) = ∑ i = 1 n g ∗ p h i − ∑ d = 2 n g ( d ) S ( n d ) S(n) = \sum\limits_{i = 1} ^{n} g * phi - \sum\limits_{d = 2} ^{n}g(d)S(\frac{n}{d}) S(n)=i=1∑ng∗phi−d=2∑ng(d)S(dn)
有 I ∗ ϕ = i d I * \phi = id I∗ϕ=id,所以 S ( n ) = ∑ i = 1 n i − ∑ d = 2 n S ( n d ) S(n) = \sum\limits_{i = 1} ^{n} i - \sum\limits_{d = 2} ^{n}S(\frac{n}{d}) S(n)=i=1∑ni−d=2∑nS(dn)
就直接推出来了。
四、求 S ( n ) = ∑ i = 1 n i ϕ ( i ) S(n) = \sum\limits_{i = 1} ^{n} i \phi(i) S(n)=i=1∑niϕ(i)
仿照二先推出一个 g g g出来,
f ∗ g = ∑ d ∣ n f ( d ) g ( n d ) = ∑ d ∣ n d ϕ ( d ) g ( n d ) f * g = \sum_{d \mid n} f(d) g(\frac{n}{d}) = \sum_{d \mid n} d \phi(d) g(\frac{n}{d}) f∗g=∑d∣nf(d)g(dn)=∑d∣ndϕ(d)g(dn)
同样联想 ∑ d ∣ n ϕ ( d ) = n \sum_{d \mid n} \phi(d) = n ∑d∣nϕ(d)=n,所以我们同样地取 g ( n ) = n = i d g(n) = n = id g(n)=n=id
就有 f ∗ g = ∑ d ∣ n n ϕ ( d ) f * g = \sum_{d \mid n} n \phi(d) f∗g=∑d∣nnϕ(d)
带入杜教筛式子就有 S ( n ) = ∑ i = 1 n i ∑ d ∣ i ϕ ( d ) − ∑ d = 2 n d S ( n d ) = S ( n ) = ∑ i = 1 n i 2 − ∑ d = 2 n d S ( n d ) S(n) = \sum\limits_{i = 1} ^{n} i \sum\limits_{d \mid i} \phi(d) - \sum\limits_{d = 2} ^{n}dS(\frac{n}{d}) = S(n) = \sum\limits_{i = 1} ^{n} i ^ 2 - \sum\limits_{d = 2} ^{n}dS(\frac{n}{d}) S(n)=i=1∑nid∣i∑ϕ(d)−d=2∑ndS(dn)=S(n)=i=1∑ni2−d=2∑ndS(dn)