杜教筛入门

前置知识

迪利克雷卷积(*):

先介绍三个重要的函数:

  • 元函数 ϵ ( 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)=dnϵ(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}) (fg)(n)=dnf(d)g(dn)

并且这个式子是满足:交换律,结合律,分配律的。

与莫比乌斯函数有关的卷积:

∑ d ∣ n μ ( d ) = [ n = = 1 ] \sum_{d \mid n} \mu(d) = [n == 1] dnμ(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 dnϕ(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=1nf(i)n1e10

根据迪利克雷卷积,我们引入一个新的积性函数 g ( n ) g(n) g(n) F ( n ) = ( g ∗ f ) ( n ) F(n) = (g * f)(n) F(n)=(gf)(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=1nF(i)=i=1n(gf)(i)=i=1ndig(d)f(di)=d=1ng(d)dif(di)=d=1ng(d)i=1dnf(i)=d=1ng(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=1nF(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=1nF(i)d=2ng(d)S(dn)

如果我们能够较快速的计算出 ∑ i = 1 n ( g ∗ f ) ( i ) \sum\limits_{i = 1} ^{n} (g * f)(i) i=1n(gf)(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=1nμ(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=1ngμd=2ng(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=1nϵd=2nS(dn)=1d=2nS(dn)

于是我们就完美解决了这个问题。

二、求 S ( n ) = ∑ i = 1 n i μ ( i ) S(n) = \sum\limits_{i = 1} ^{n} i \mu(i) S(n)=i=1niμ(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=1ngμidd=2ng(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=1nid=2nS(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}) gf=dnf(d)g(dn)=dndμ(d)g(dn)

容易想到 ∑ d ∣ n μ ( d ) = [ n = = 1 ] \sum_{d \mid n} \mu(d) = [n == 1] dnμ(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=1ndiiμ(d)d=2ndS(dn)=i=1nidiμ(d)d=2ndS(dn)=i=1ni(i==1)d=2ndS(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)=1d=2ndS(dn)

三、求 S ( n ) = ∑ i = 1 n ϕ ( i ) S(n) = \sum\limits_{i = 1} ^{n} \phi(i) S(n)=i=1nϕ(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=1ngphid=2ng(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=1nid=2nS(dn)

就直接推出来了。

四、求 S ( n ) = ∑ i = 1 n i ϕ ( i ) S(n) = \sum\limits_{i = 1} ^{n} i \phi(i) S(n)=i=1niϕ(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}) fg=dnf(d)g(dn)=dndϕ(d)g(dn)

同样联想 ∑ d ∣ n ϕ ( d ) = n \sum_{d \mid n} \phi(d) = n dnϕ(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) fg=dnnϕ(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=1nidiϕ(d)d=2ndS(dn)=S(n)=i=1ni2d=2ndS(dn)