时刻记住狄利克雷卷积定义:c(n)=∑i∣na(i)b(in)
(这里的 = 没有赋值的意思)
在本文中的一些基本定义:
e(x)=[x=1] (只有x=1时值才为一,其他时候值为0)
idk(x)=xk
ϕ(x)=∑i=1x[gcd(i,x)=1]
a⊗b表示a和b的狄利克雷卷积
任何函数⊗e还是它本身,所以e是单位元。
看到∑i∣nf(i) 时可以想一想是不是f⊗id0(记住卷积定义)
几个微小的证明
∑d∥nμ(d)=[n=1]
(μ⊗id0=e)
现在江将n进行质因数分解,得到:
n=p1m1p2m2..pkmk
令n∗=p1p2..pk
根据μ的定义,假如说d有平方项,那μ(d)为零。
所以∑d∣nμ(d)=∑d∣n∗μ(d)=∑i=0k(ik)(−1)i
观察二项式展开的样子:
(1+x)k=∑i=0k(ik)xi
把x=−1带进来
所以∑d∣nμ(d)=(1−1)k
现在有函数F(x)=∑i∥xf(i),知道F(x)要求f(x)
把原式子写成卷积的形式:F=f⊗id0
同时卷一下μ
F⊗μ=f⊗id0⊗μ
然而前面证明了μ⊗id0=e
所以F⊗μ=f⊗e=f
反…反演
计算一类积性函数的前缀和
这里定义F是f的前缀和。
现在,对于一个函数f,找两个易求前缀和的函数f∗和f+,使得:
f∗⊗f=f+
则F+(n)=∑i=1n∑d∥if(d)f∗(di)
把对每个数枚举因数改为枚举因数找倍数
F+(n)=∑1=1nf∗(i)∑j=1⌊in⌋f(j)=∑i=1nf∗(i)F(⌊in⌋)
把i=1的情况单独提取出来
F+(n)=f∗(1)F(n)+∑i=2nf∗(i)F(⌊in⌋)
对于积性函数有一个很显然的性质:a(1)=1或0,否则不满足f(a)∗f(b)=f(ab)
为0时没有任何意义,所以我们构造的时候不会选择一个f(x)=0的函数,所以
F+(n)=F(n)+∑i=2nf∗(i)F(⌊in⌋)
F(n)=F+(n)−∑i=2nf∗(i)F(⌊in⌋)
这样先递推F(n)到n32级别的位置
然后记忆化一下 F(⌊in⌋)