积性函数求前缀和

来源:互联网 发布:网络存储空间哪个好 编辑:程序博客网 时间:2024/04/29 03:30

积性函数定义

若函数f满足
a,b互质有f(a*b)=f(a)*f(b),我们则称f是积性函数。
常见的比如欧拉函数,莫比乌斯函数,都属于积性函数。

积性函数求前缀和

线性筛法,利用积性函数的积性,筛素数同时可以计算积性函数。
然而有些问题要求低于线性的复杂度。

杜教筛

同样利用积性函数的性质。
举常见的莫比乌斯函数为例。
ni=1μ(i)(1<=n<=10^10)
线性复杂度显然无法接受。
杜教筛法如何解决呢?
d|nμ(d)=[n=1]
设s(n)=ni=1μ(i)
s(n)=ni=1d|iμ(d)ni=1d|i(d<i)μ(d)
=1-ni=1d|i(d<i)μ(d)
接下来一步十分机智,考虑因为d|id<ii/d>=2
于是有
s(n)=1-ni=2nid=1μ(d)(这里的i表示的是d的几倍)
=1-ni=2s(ni)
可以加上分块和记忆化优化, 复杂度为O(n34)(怎么算出来的——不会算)
还可以继续优化,先预处理出n23内的s的值,递归到时就可以直接返回,复杂度为O(n23),这就很可观了。
如果是求ni=1φ(i),利用d|nφ(d)=n,一样的做就好了。
当然,有些积性函数并没那么好算,但出题人如果不是丧心病狂的话,通常是能用些机智做法做的。
例如f(x)=xμ(x),显然,f是一个积性函数
d|xf(d)x/d=[n=1]
设S(x)=ni=1f(i) ,结合上者则有
S(x)=1xi=1d|i(d<i)f(d)(i/d)
=1xi=2xdd=1f(d)i
=1xi=2iS(xd)

小结

杜教筛会单独被考吗?这样就水了,通常会和比较复杂的反演搞在一起。但是只要涉及积性函数,我们应有意识的想到杜教筛。

0 0
原创粉丝点击