积性函数求前缀和

积性函数定义

若函数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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值