码迷,mamicode.com
首页 > 其他好文 > 详细

一种筛法

时间:2018-01-17 15:47:50      阅读:400      评论:0      收藏:0      [点我收藏+]

标签:一个   icpc   mis   文章   href   zoj   正整数   tps   eee   

这篇文章讲的是一种筛法,我个人将它称之为Min_25筛。

它可以用来求积性函数$F(x)$的前缀和,条件与洲阁筛一样,可以快速地对一段质数的F求和。

它可以替代洲阁筛,而且空间常数、时间常数、代码复杂度远比洲阁筛优秀,甚至可以与杜教筛相媲美

时间复杂度大约与洲阁筛相同。

参考链接:

https://post.icpc-camp.org/d/782-spoj-divcnt3/2

https://loj.ac/submission/56015

https://github.com/zimpha/competitive-programming/blob/a0d1ea23778561d29b1d9e4c95eeea63e4e9775a/zoj/3808.cc

首先我们先考虑洲阁筛里面干了什么,首先我们需要对每一个$x=\lfloor n/i \rfloor$,求出$\sum_{i=1}^x [i是质数] i^k$。

还是类似洲阁筛,我们考虑每一个$\leq \sqrt{n}$的质数p,对每个x维护$A(x)=\sum_{i=1}^x [i是质数或i的每个质因子都>p] i^k$。

我们考虑从大到小更新,我们发现我们要做的事情实际上是对于每个$x \geq p^2$,令$A(x)-=(A(x/p)-A(p))*p^k$。直接暴力更新。这个部分和洲阁筛复杂度是一样的,也是$O(\frac{n^{\frac{3}{4}}}{\log(n)})$的。

接下来考虑如何对函数求和,我们可以十分暴力地求和。我们定义S(n,x)表示对于2到n的,每个质因子都$\geq x$的数的F之和。

我们先对质数的F求和,这个用预处理好的A就行。

否则我们从x开始枚举数的最小质因子p,如果$p^2>n$那么break,否则的话我们枚举一个满足$p^{e+1} \leq n$的正整数e,把$S(n/p^e,p的下一个质数)F(p^e)+F(p^{e+1})$计入答案。

这部分的复杂度我不会分析,不过我觉得应该和洲阁筛差别也不大。

一种筛法

标签:一个   icpc   mis   文章   href   zoj   正整数   tps   eee   

原文地址:https://www.cnblogs.com/zzqsblog/p/8302815.html

(1)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!