所有失败都只是通往成功的过程。|

OccDreamer

园龄:3年7个月粉丝:7关注:8

杜教筛 & Min25 筛

发现这个东西很容易忘,果然还是理解不够吧,写一篇博客方便以后复习。

杜教筛

目的是要求 S(n)=i=1nf(i)

我们需要构造两个函数 g,h 满足 fg=h,其中 h 是一个积性函数且能快速求和。

考虑求 i=1nd|if(d)g(id)=i=1nh(i)=i=1ng(i)S(ni)

我们发现在上述式子中 i=1nh(i)i=2ng(i)S(ni)=g(1)S(n)

所以 S(n)=i=1nh(i)i=2ng(i)S(ni)g(1)

然后就做完了。

列举一些常见的求和。

  • i=1nμ(i),配 g(i)=1 即可。
  • i=1nϕ(i),配 g(i)=1 即可。
  • i=1nμ(i)×i,配 g(i)=i 即可。
  • i=1nϕ(i)×i,配 g(i)=i 即可。

Min25

f(pc) 能快速求值。

g(n,j)=i=1n[minprime(i)>primej or iprime]f(i)
h(n,j)=i=1n[minprime(i)primej]f(i)

先来考虑 g 的转移。

这个时候分为两种情况。

  • primej2>n,那么有 g(n,j)=g(n,j1),原因显然。
  • primej2n,那么有 g(n,j)=g(n,j1)f(primej)(g(nprimej,j1)g(primej1,j1))

接下来考虑怎么求 h(n,j)

先考虑质数贡献,显然有贡献的为大于等于 primej 的质数,也就是 g(n,|prime|)i=1j1f(primei)

接下来考虑合数贡献,我们枚举合数的最小质因子及其次数。

contribution=i=j|prime|t0f(primeit)h(nprimeit,i+1)+f(primeit+1)

最后要加上一个 f(primeit+1) 是因为不难发现 h(n,j) 不会算到 f(1) 的值,所以质数的次幂会算漏,因此补上。

所以 h(n,j)=g(n,|prime|)i=1j1f(primei)+contribution

最后求的就是 h(n,0)+f(1)

本文作者:OI 生活

本文链接:https://www.cnblogs.com/OccasionalDreamer/p/17451852.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   OccDreamer  阅读(23)  评论(1编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起