首页 > 其他 > 详细

min_25筛学习笔记

时间:2019-05-03 23:51:43      阅读:184      评论:0      收藏:0      [点我收藏+]

未完工,先放上来

min_25筛

筛一个积性函数\(f(n)\)的前缀和\(S(n)=\sum_{i=1}^n f(n)\),这个函数还需要满足的性质是\(f(p)\)是一个关于\(p\)的多项式、\(f(p^k)\)可以快速计算。

考虑质数单独提出来算,合数在它最小(大?)的质数处统计。

第一步

考虑积性函数的性质还不够优秀,不如把多项式的各项拆开来分别算,最后再合在一起。

于是在这一步中假定\(f(p)=p^t\),它就完全积性了。

\(P_j\)为从小到大第\(j\)个质数
\[ g(n,j)=\sum_{i=1}^n [i\in Prime\ \ \text{or}\ \ minP(i)> P_j]f(i) \]
显然,要求所有质数的\(f\)值和,就是\(g(n,|P|)\)

\(g\)的初值比较麻烦,但考虑所有不为质数的值最终都会被筛掉,那么一开始可以把所有\(f(i)\)当成质数来算,即\(f(i)=i^t\)

从小到大枚举\(j?\)来递推\(g(n,j)?\),有如下转移式:
\[ g(n,j)=\begin{cases} g(n,j-1)&,P_j>\sqrt{n}\g(n,j-1)-f(P_j)\times(g(\lfloor \frac{n}{P_j}\rfloor,j-1)-\sum_{i=1}^{j-1} f(P_i))&,P_j\le \sqrt{n} \end{cases} \]
第一个式子:\(P_j^2>n?\)了,所以不会有多的数被筛掉。

第二个式子:把最小质因子是\(P_j?\)的筛掉。

(注意现在这个函数的性质非常好,所以当成质数来算还是可以有完全积性函数的性质)

于是可以\(O(n\times |P|)?\)搞出\(n?\)个数的\(g(n,|P|)=\sum_{i=1}^n [i\in Prime]f(i)?\),但这样还是太多了。在第二步中我们会发现其实根本不需要\(O(n)?\)的所有\(g(n,|P|)?\)

第二步

请注意在这一步中\(f(n)\)不再完全积性了。


\[ S(n,j)=\sum_{i=1}^n [minP(i)\ge P(j)]f(i) \]
那么又会有递推式:
\[ S(n,j)=g(n,|P|)-\sum_{i=1}^{j-1} f(P_i)+\sum_{k\ge j,P_k\le Sqr} \sum_{P_k^{e+1}\le n} (f(P_k^e)S(\frac{n}{P_k^e},k+1)+f(P_k^{e+1})) \]

(这里面\(f(P_k^e)S(\frac{n}{P_k^e},k+1)?\)可以直接乘起来的原因是\(S(n/P_k^e,k+1)?\)中所有元素都与\(P_k?\)互质)

注意\(S(n,j)\)只调用了\(g(n,j)\)\(S(\frac{n}{P_k^e},k+1)\),所以第一步中只需要算出所有\(g(n/i,j)\)就够了,而这是\(O(\sqrt{n}\times |P|)\)的。

这东西直接算就好了,不用记忆化。

最后总复杂度可以被证明是\(O(\frac{n^{3/4}}{\log n})\)?反正我不会证明,直接用就好了。

min_25筛学习笔记

原文:https://www.cnblogs.com/p-b-p-b/p/10807098.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!