狄利克雷卷积
(f∗g)(n)=d∣n∑f(d)g(dn)(d为n的因子)
称为 f(x) 和 g(x) 在n上的卷积
有以下性质
-
f∗g=g∗f
-
(f∗g)∗h=f∗(g∗h)
-
(f+g)∗h=f∗h+g∗h
-
μ∗I=ε
(ε(n)=[n=1] (仅在n=1时为1,否则为0))
(I(n)=1)
-
φ∗I=id
(id(n)=n)
-
μ∗id=φ
其中上面的第四五个性质最为常用,我们有比较直观的形式
[n=1]=d∣n∑μ(d)
f(x)=d∣f(x)∑φ(d)
反演
与gcd有关的问题常用莫比乌斯反演和欧拉反演
莫比乌斯反演
有判断函数常用莫比乌斯反演
i=1∑nj=1∑m[gcd(i,j)=k]
变形
i=1∑[kn]j=1∑[km][gcd(i,j)=1]
由莫比乌斯反演可得
i=1∑[kn]j=1∑[km]d∣gcd(i,j)∑μ(d)
d∣gcd(i,j),则可推出 d∣i 且 d∣j
所以交换求和顺序
d=1∑[kn]μ(d)i=1∑[kdn]j=1∑[kdm]
d=1∑[kn]μ(d)[kdm][kdn]
欧拉反演
gcd求和常用欧拉反演
i=1∑nj=1∑mgcd(i,j)
由欧拉反演可得
i=1∑nj=1∑md∣gcd(i,j)∑φ(d)
交换求和顺序
d=1∑nφ(d)i=1∑[dn]j=1∑[dm]
d=1∑nφ(d)[dn][dm]
杜教筛
求
i=1∑nf(i)=s(n)
其中 f(i) 为积性函数
再找一个积性函数 g ,考虑狄利克雷卷积
i=1∑n(f∗g)(i)
i=1∑nd∣i∑f(d)g(di)
为了更好地处理我们有 di=k 考虑主要枚举k,k∈[1,n];再枚举d,d∈[1,kn],然后就有下面的变形
d=1∑ng(d)i=1∑[dn]f(i)
d=1∑ng(d)s([dn])
然后有
g(1)s(n)=i=1∑ng(i)s([in])−i=2∑ng(i)s([in])
g(1)s(n)=i=1∑n(f∗g)(i)−i=2∑ng(i)s([in])
选择合适的 g,可以消掉 g(1) 并且方便地求出 ∑i=1n(f∗g)(i),∑i=2ng(i) 通过前缀和可以求出,s([in])可以通过数论分块+递归求出,总时间复杂度 O(n43)
例如对于 f=μ 我们可以选取 g=I,f∗g=ε
对于 f=φ 我们可以选取 g=I,f∗g=id
从而达到快速求解