罪的晚风,可曾带回朝露映的清纯?|

LarsWerner

园龄:4年11个月粉丝:20关注:3

杜教筛 & Powerful Number 筛

迪利克雷卷积

对于数论函数 FG,我们定义迪利克雷卷积的结果 H=FG

Hn=dnFdGnd

有些好的性质,比如:对于积性函数 FG,其迪利克雷卷积 FG 也是积性函数;而在迪利克雷卷积的意义下,积性函数 F 的逆也是积性函数(逆满足 F1F=e)。

当公因式是完全积性函数时,点乘对迪利克雷卷积有分配律(下式中要求 X 为完全积性函数):

(AX)(BX)=(AB)X

杜教筛

假设我们对于积性函数 f,要求出 f 的前缀和,即 infi。我们找到积性函数 g,设 h=fg。设 Sf 表示 f 的前缀和,则有:

Sh(n)=i=1ndigdfi/d=d=1ngdi=1n/dfi=d=1ngdSf(n/d)

d>1 的项提到左边去,得到

Sf(n)=Sh(n)d=2ngdSf(n/d)

我们把 n2/3Sf 全部线性筛处理了,然后按上面的式子递归算,最后得到的处理 Sf 的复杂度是 O(n2/3)

一些常见恒等式

关于 μ

  • μI=ϵ

  • (μidk)idk=(μidk)(Iidk)=(μI)idk=ϵ

  • μ2=d2nμ(d)
    有了这个就可以求 μ2 的前缀和,即

    i=1nμ(i)2=i=1nd2iμ(i)=d=1nμ(d)d2i1=d=1nμ(d)nd2

    然后就可以 O(n) 求了。

关于 φ

  • φI=id
  • (φidk)idk=(φidk)(Iidk)=(φI)idk=idk+1
  • φ(ij)=φ(i)φ(j)gcd(i,j)φ(gcd(i,j))
    不断地带 φ(x)=xdxd1d 即可。

BZOJ3512 DZY Loves Math IV

对于积性函数的性质的应用。

一个比较有趣的技巧:对于 x,设其为 x=piqi,我们设 q=pip=xq,我们考虑直接求 φ 的式子,每个因数只有在第一次会有特殊处理,其他情况都是直接乘上,所以 φ(x)=pφ(q),且对于任意 i,都有 φ(ix)=pφ(iq)。然后由于 q 每个数都只有一次项,所以有很多互质的性质,可以在积性函数上得以体现。

S(n,m)=i=1mφ(i×n),我们把 n 拆成 pq,则有

S(n,m)=i=1mφ(iq)p=pi=1mgcd(i,q)×φ(qgcd(i,q))φ(i)=pi=1mφ(i)φ(qgcd(i,q))dgcd(i,q)φ(d)=pi=1mφ(i)di,dqφ(qdgcd(i,q))=pi=1mφ(i)xi,xqφ(dx)=pdqnφ(qd)dimφ(i)=pdqnφ(qd)S(d,md)

然后直接递推即可,复杂度分析和杜教筛相似。

LOJ6686 Stupid GCD

i=1ngcd(i3,i)

考虑 n=k3+1 的情况。如果不是的话后面应该还要有一项,那一项单独处理是类似(这么写只是因为一开始漏考虑了…)。

i=1ngcd(i3,i)=i=1ndi3,diφ(d)=i=1k1j=i3(i+1)31di,djφ(d)=d=1k1φ(d)dik1i3+3i2+3idi31d=d=1k1φ(d)i=1k1d3di2+3i+1=3d=1k1φ(d)di=1k1di2+d=1k1φ(d)i=1k1d3i+1

φidk 显然是可以杜教筛的(上面说过),于是就可以做了。

Powerful Number 筛

定义一个数为 Powerful Number,当且仅当它的每个质因子次数都 >2。由于每个 PN 都可以表示成 x2y3,于是可以发现 n 的 PN 个数为 O(n)

我们需要求出积性函数 f(x) 的前缀和,考虑构造积性函数 g(x),h(x),满足 f=gh,且 f(p)=g(p)。此时我们发现 f(p)=g(p)h(1)+g(1)h(p),由于 g(1)=h(1)=1,于是 h(p)=0。对于积性函数,如果它在质数处取 0,那么显然它只有在 PN 处才可能有值。

于是我们要求的

i=1nf(i)=ijg(i)h(j) =inh(i)j=1n/ig(j)

由于 h 只在 PN 处有值,所以我们相当于只需要算 ng 的前缀和在 ni 处的值即可。于是我们只需要对 g 做杜教筛即可。

还有一件事情,就是如何确定 h。我们按照 h 的定义式进行处理

f(pk)=i+j=kg(pi)h(pj)h(pk)=f(pk)i=0k1h(pi)g(pki)

由于 PN 的质因子 p 一定 n,于是就可以 O(nlog2n) 求出所有所需的 h 了。

找 PN 的过程枚举每个 p 的次数,dfs 即可。

LG5325 【模板】Min25筛

题目中 f(pk)=pk(pk1)。于是 f(p)=p(p1)。我们取积性函数 g=idφ 即可。前面说到过 (idvarphi)id=id2,直接杜教筛。

这题还有一个好处,由于 g=idφg(pk)=(p1)p2k1,我们可以手算出 h(pk)=(k1)pk(p1)

LOJ6053 简单的函数

题目中 f(pc)=pc。于是 f(p)=p1,即在 p=2f(p)=3,其余时候 f(p)=p1。但是这个 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 中国大陆许可协议进行许可。

posted @   LarsWerner  阅读(50)  评论(0编辑  收藏  举报
历史上的今天:
2020-04-30 【LsWn的动态规划】区间DP
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起