「关于一种处理关于$p$成多项式的数论函数筛法」

  张博航原知乎网址html

  张博航原博客网址算法

引入:数组

  给一个彻底积性函数$f$,求其前缀和函数

  $$S(n)=\sum_{i=1}^nf(i)$$spa

初步思考:设计

  考虑因为所求函数为彻底积性函数,咱们很容易用一个线性筛在$O(n)$的时间负责度内解决问题。htm

  可是每每这类问题要求更加优秀的时间负责度,那么线筛便不能知足咱们的须要,咱们须要更加优秀的作法。blog

  咱们考虑一种最基础的筛法:埃拉托斯特尼筛法。ip

  在这种筛法的思路中,咱们只须要枚举$\sqrt n$之内的质数,那么咱们是否能够引入这种想法呢?get

进一步思考:

  咱们考虑将$S(n)=\sum_{i=1}^n f(i)$换成与质数有关的表达形式。

  咱们设$\tau(x) = x的最大质因子$。

  那么

  $$S(n) = \sum _{i=2}^n\sum_{\tau(i)<p,i*p<=n}f(ip) + \sum_{i=2}^nf(i)[\tau^2(i)|i] + f(1) + \sum_{p=2}^n f(p)$$

  $$\because \forall a,b\; f(ab)=f(a)f(b)$$

  $$\therefore S(n)=\sum_{i=2}^nf(i)\sum_{\tau(i)<p,ip<=n,p==\tau (p)}f(p)+\sum_{i=2}^nf(i)[\tau^2(i)|i]+f(1)+\sum_{p=2}^nf(p)$$

  咱们来看这个式子。

  咱们发现前两部分枚举的$i$所含质数$p$必然$p<=\sqrt n$。

  那么咱们使用DFS来枚举这些$i$会发现枚举量为:$$n-\sum_{i=\sqrt n+1,i=\tau(i)}^n \lfloor \frac{n}{i} \rfloor$$

  这个式子我并不会算……

  可是经过张博航的博客,这个式子的结果是约等为$\frac{n^{\frac{3}{4}}}{ln n}$存在必定的常数。

思考算法设计:

  那么问题就变成了如何去求$\sum_{\tau(i)<p,ip<=n}f(p)$以及$\sum_{p=2,p=\tau(p)}f(p)$。

  咱们发现后者实际上是能够看做于前者是一类的。

  那么设$S'(n)=\sum_{p=2,p=\tau(p)}f(p)$,即上式为$S'(\frac{n}{i})-S'(\tau(i))$来表示的。

  因为除法分块咱们能够知道$\lfloor \frac{n}{i} \rfloor$取值仅有$\sqrt n$级别个,同时$\tau(i) <=\sqrt n$。

  那么咱们设$$a_i = S'(i),b_i=S'(\frac{n}{i}),i\leqslant \sqrt n$$

  那么考虑如何求出$S'$。

  咱们先将全部数都看作质数,那么此后咱们从小到大枚举一个每一个小于$\sqrt n$的质数$p$,那么

  $$S'(i)=S'(i)-f(p)(S'(\frac{i}{p})-S'(p-1))$$

  考虑用数学概括法证实:

  首先当$p==2$时,此式显然获得的是去掉全部含“2”因子的合数。

  那么设此式在以前质数中都是正确的,此时枚举到了$p$。同时设$\zeta i = i的最小质因数$

  那么咱们考虑此时

    $S'(x)=\sum_{i=2,i=\tau(p),i<p}f(p) + \sum_{i=p}^x [\zeta(i)>=p]f(i)$

  那么

    $f(p)(S'(\frac{i}{p})-S'(p-1) )= \sum_{j=p}^{\frac{i}{p}} [\zeta(i)>=p] f(i*p)$

  即此时咱们给$S'(i)$删去了所含质因数均大于等于$p$的合数。故上式当处理到$\sqrt n$时是正确的。

  

  咱们再考虑如何求出$a,b$数组。

  显然咱们要从小到大枚举每一个质数,再从大到小枚举每个有用的$i$。而后考虑:

  1)  若$i>\sqrt n$那么其对应位置必定在$b$数组出现过。

  2)  若$\frac{i}{p}>sqrt n$那么其对应位置也必然在$b$中出现,这是因为$i$是由$\frac {n} {j}$获得的。

   那么$\frac{i}{p}$就等价于$\lfloor \frac{ \frac{n}{j} }{p} \rfloor= \frac {n} {jp}$显然$jp<=\sqrt n$ 那么其此时$\frac{i}{p}$必定在b中出现过。

  3) 若$i<=\sqrt n$ 那么其必然出如今$a$中,$\frac{i}{p}$同理。

  也就是说对于用每一个$p$来更新$a,b$须要且仅须要$a,b$数组。

  考虑求$a,b$的时间复杂度约为:

  $ \sum_{i=2,i=\tau i} (2\sqrt n - i^2) $。

  这个东西,应该约为$\frac {2n^\frac{3}{4}} {3ln(\sqrt n)}$。考虑枚举第一部分$i$具备常数。这两部分应该是很接近的。

算法使用范围:

  假设咱们能够将一个函数写成关于$p$的$k$阶多项式形式的话,咱们就能够利用上面描述的筛法,在$k\frac{n^\frac{3}{4}}{lnn}$时间内获得答案。

======update======

  这个彷佛和min_25筛很像?

相关文章
相关标签/搜索