首页 > 其他 > 详细

Min25筛

时间:2020-07-08 23:57:29      阅读:101      评论:0      收藏:0      [点我收藏+]

  顾名思义,这是\(min25dalao\)发明的算法,可以用来处理一些积性函数求和的问题。

  • 用途
    我们现在有一个积性函数\(F(x)\),要我们快速计算前缀和,即求

\[\sum_{i=1}^{n} F(i) \]

  • 前置知识
    数论函数基本性质,比较基础就不说了...

  • 使用前提
    \(1.\forall p \in prime F(p)\)是一个低阶多项式
    \(2.\forall p \in prime,k \in N_+ F(p^k)\)可以快速求出
    (条件说实话还是比较严苛的...)

  • 解决问题
    我们明确了一些大前提,那么到底该怎么实现呢?
    首先将和式拆开,即分成

\[\sum_{p \in prime} F(p) + \sum_{i \notin prime} F(i) \]

  先考虑前半部分,也就是所有质数上的值。

  • \(step 1\) 求解质数
    考虑构造一个完全积性函数\(F‘(x)\),使得\(\forall p \in prime,F‘(p)=F(p)\)
    那么我们只要求出\(F‘(x)\)在所有质数上的值即可
    这里我们运用\(DP\)的思想,设

\[g(n,m)=\sum_{i=1}^{n} F‘(i)[i \in prime | minp(i)>p_m] \]

  那么可以得到转移

\[g(n,m)=\begin{cases} g(n,m-1)&p_m>\sqrt{n}\g(n,m-1)-F‘(p_m)[g(\frac{n}{p_m},m-1)-g(p_m-1,m-1)]&p_m<=\sqrt{n} \end{cases} \]

  我们设\(k = max\){\(k|p_k<=\sqrt{n}\)}
  则答案显然为\(g(n,k)\)
  这样前半部分就结束了,我们接下来考虑求解整个函数。

  • \(step 2\) 求解答案
    我们可以考虑和求质数的值一样的方法,设

\[S(n,m)=\sum_{i=1}^{n}F(i)[minp(i)>p_m] \]

  那么可以得到转移

\[S(n,m)=g(n,k)-\sum_{i=1}^{m-1}F(p_i)+\sum_{i>m} \sum_{e} F(p_i^e)(S(\frac{n}{p_i^e},i)+[e>1]) \]

  这样我们就做完了。

yyb的博客
GuessYCB的博客

Min25筛

原文:https://www.cnblogs.com/leukocyte/p/13268508.html

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