筛法求素数c语言详解_新版min25筛(O(n^(2/3)))详解

(同步更新于我的blog:dengtesla)

众所周知,min_25曾经使用过一种较为通用的对积性函数求前缀和的亚线性筛法,复杂度为

,而在去年的11.11日,min_25又在他的个人博客上更新了一种新的求解积性函数前缀和的亚线性筛法,该算法的复杂度优化至了
,但由于其博客为日文并且有诸多“省略”的地方理解起来较为不容易,因此打算写这么篇文章较为详细地解读这个新做法(勉强算教程向吧)。

与老版min_25筛的对比:

首先最大的差异便是复杂度了。老版的min_25筛复杂度为

,这而这个新筛法复杂度为
,但事实上常数较为巨大,所以在时间上其实并不是太占优势(也可能是我的姿势不太对)。

在大致的思路方面其实两者的差异不是很大,新版min_25筛主要是在原有基础上利用树状数组和一些数论知识进行了一些加速,大体思路还是比较相似的(后半部分的方法对步骤进行了切割,变得更加复杂了)。

就适用范围来说,两种min_25筛所适用的都是满足"在质数处表达式为多项式,在质数的高次幂处可以快速求值"的积性函数。事实上如果对其原理较为熟悉的话是可以略微扩大一些它的适用范围的,但就我个人而言,新版min_25筛较老版更难变通,也可能是还不够熟悉这种筛法的缘故。

比较振奋人心的是新版min_25筛对于所求的

可以同时得到
处的所有的值,其中
表示该积性函数在
处的前缀和。据我所知老版min_25筛只能对
单点处求值,或者牺牲一定的时间/空间复杂度来记忆化获得其他
个点处的值。

一些也许会有用的前置资料:

  1. min_25本人的blog: Sum of Multiplicative Function
  2. 朱震霆的国家集训队论文: 《一些特殊的数论函数求和问题》, 国家集训队2018论文集
  3. 计算
    的meissel-lehmer方法: Computing pi(x): The Meissel, Lehmer, Lagarias, Miller, Odlyzko method
  4. yyb的blog(不错的老版min_25筛教程): min_25筛
  5. 我的blog(老版min_25筛前半部分的解读): 一种亚线性筛法的详细解读(min_25筛前置)

一些符号与记号:

(以下基本照搬自min_25的blog)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值