迪利克雷卷积
对于数论函数 F,G,我们定义迪利克雷卷积的结果 H=F∗G 为
Hn=∑d∣nFdGnd
有些好的性质,比如:对于积性函数 F 与 G,其迪利克雷卷积 F∗G 也是积性函数;而在迪利克雷卷积的意义下,积性函数 F 的逆也是积性函数(逆满足 F−1∗F=e)。
当公因式是完全积性函数时,点乘对迪利克雷卷积有分配律(下式中要求 X 为完全积性函数):
(A⋅X)∗(B⋅X)=(A∗B)⋅X
杜教筛
假设我们对于积性函数 f,要求出 f 的前缀和,即 ∑i≤nfi。我们找到积性函数 g,设 h=f∗g。设 Sf 表示 f 的前缀和,则有:
Sh(n)=n∑i=1∑d∣igdfi/d=n∑d=1gd⌊n/d⌋∑i=1fi=n∑d=1gdSf(⌊n/d⌋)
把 d>1 的项提到左边去,得到
Sf(n)=Sh(n)−n∑d=2gdSf(⌊n/d⌋)
我们把 ≤n2/3 的 Sf 全部线性筛处理了,然后按上面的式子递归算,最后得到的处理 Sf 的复杂度是 O(n2/3)。
一些常见恒等式
关于 μ:
-
μ∗I=ϵ
-
(μ⋅idk)∗idk=(μ⋅idk)∗(I⋅idk)=(μ⋅I)∗idk=ϵ
-
μ2=∑d2∣nμ(d)
有了这个就可以求 μ2 的前缀和,即
n∑i=1μ(i)2=n∑i=1∑d2∣iμ(i)=√n∑d=1μ(d)∑d2∣i1=√n∑d=1μ(d)⌊nd2⌋
然后就可以 O(√n) 求了。
关于 φ:
- φ∗I=id
- (φ⋅idk)∗idk=(φ⋅idk)∗(I⋅idk)=(φ⋅I)∗idk=idk+1
- φ(ij)=φ(i)φ(j)gcd(i,j)φ(gcd(i,j))
不断地带 φ(x)=x∏d∣xd−1d 即可。
BZOJ3512 DZY Loves Math IV
对于积性函数的性质的应用。
一个比较有趣的技巧:对于 x,设其为 x=∏pqii,我们设 q=∏pi,p=xq,我们考虑直接求 φ 的式子,每个因数只有在第一次会有特殊处理,其他情况都是直接乘上,所以 φ(x)=pφ(q),且对于任意 i,都有 φ(ix)=pφ(iq)。然后由于 q 每个数都只有一次项,所以有很多互质的性质,可以在积性函数上得以体现。
设 S(n,m)=∑mi=1φ(i×n),我们把 n 拆成 pq,则有
S(n,m)=m∑i=1φ(iq)p=pm∑i=1gcd(i,q)×φ(qgcd(i,q))φ(i)=pm∑i=1φ(i)φ(qgcd(i,q))∑d∣gcd(i,q)φ(d)=pm∑i=1φ(i)∑d∣i,d∣qφ(qdgcd(i,q))=pm∑i=1φ(i)∑x∣i,x∣qφ(dx)=pn∑d∣qφ(qd)m∑d∣iφ(i)=pn∑d∣qφ(qd)S(d,⌊md⌋)
然后直接递推即可,复杂度分析和杜教筛相似。
LOJ6686 Stupid GCD
求 ∑ni=1gcd(⌊3√i⌋,i)。
考虑 n=k3+1 的情况。如果不是的话后面应该还要有一项,那一项单独处理是类似(这么写只是因为一开始漏考虑了…)。
n∑i=1gcd(⌊3√i⌋,i)=n∑i=1∑d∣⌊3√i⌋,d∣iφ(d)=k−1∑i=1(i+1)3−1∑j=i3∑d∣i,d∣jφ(d)=k−1∑d=1φ(d)k−1∑d∣i⌊i3+3i2+3id⌋−⌊i3−1d⌋=k−1∑d=1φ(d)⌊k−1d⌋∑i=13di2+3i+1=3k−1∑d=1φ(d)d⌊k−1d⌋∑i=1i2+k−1∑d=1φ(d)k−1d∑i=13i+1
φ⋅idk 显然是可以杜教筛的(上面说过),于是就可以做了。
Powerful Number 筛
定义一个数为 Powerful Number,当且仅当它的每个质因子次数都 >2。由于每个 PN 都可以表示成 x2y3,于是可以发现 ≤n 的 PN 个数为 O(√n)。
我们需要求出积性函数 f(x) 的前缀和,考虑构造积性函数 g(x),h(x),满足 f=g∗h,且 f(p)=g(p)。此时我们发现 f(p)=g(p)h(1)+g(1)h(p),由于 g(1)=h(1)=1,于是 h(p)=0。对于积性函数,如果它在质数处取 0,那么显然它只有在 PN 处才可能有值。
于是我们要求的
n∑i=1f(i)=∑ijg(i)h(j) =∑i≤nh(i)n/i∑j=1g(j)
由于 h 只在 PN 处有值,所以我们相当于只需要算 √n 个 g 的前缀和在 ⌊ni⌋ 处的值即可。于是我们只需要对 g 做杜教筛即可。
还有一件事情,就是如何确定 h。我们按照 h 的定义式进行处理
f(pk)=∑i+j=kg(pi)h(pj)h(pk)=f(pk)−k−1∑i=0h(pi)g(pk−i)
由于 PN 的质因子 p 一定 ≤√n,于是就可以 O(√nlog2n) 求出所有所需的 h 了。
找 PN 的过程枚举每个 p 的次数,dfs 即可。
LG5325 【模板】Min25筛
题目中 f(pk)=pk(pk−1)。于是 f(p)=p(p−1)。我们取积性函数 g=id⋅φ 即可。前面说到过 (id⋅varphi)∗id=id2,直接杜教筛。
这题还有一个好处,由于 g=id⋅φ,g(pk)=(p−1)p2k−1,我们可以手算出 h(pk)=(k−1)pk(p−1)。
LOJ6053 简单的函数
题目中 f(pc)=p⊕c。于是 f(p)=p⊕1,即在 p=2 时 f(p)=3,其余时候 f(p)=p−1。但是这个 g 的前缀和并不好求。这时候,我们考虑直接令 g(p)=φ,并且根据 h 的定义式修改 h。这时候的 h 就不符合只有 PN 处有值的性质了。但是我们发现增加的有值的地方只会是 PN 乘上 2。所以复杂度仍然正确。
https://loj.ac/s/1764869
本文作者:LarsWerner
本文链接:https://www.cnblogs.com/TetrisCandy/p/17364886.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
2020-04-30 【LsWn的动态规划】区间DP