关于min_25筛的一些理解

如果想看如何筛个普通积性函数啥的,就别往下看了,下面没有的(QwQ)。
下文中,所有的\(p\)都代表质数,\(P\)代表质数集合。
注意下文中定义的最小/最大质因子都是默认所有质因子本质不同。
即\(2*2*3*4*5*5\)的最小/次小质因子都是\(2\),最大/次大质因子都是\(5\)。

step1. 适用条件与思想

min_25筛用于求积性函数前缀和,即\(\sum_{i=1}^n f(i)\) 。
min_25筛相比于传统筛法来说(如莫比乌斯反演、杜教筛),更加灵活,也没有什么定式套路。
很多时候其实可以直接看成一个dp的模型。
这个模型可以解决很多关于质因子贡献的问题。
它的适用条件:

  • \(f(p)\)可以表示为简单多项式
  • \(f(p^k)\) 可以快速求。

第一个条件还蛮严苛的。
min_25筛的思想感觉还是非常有用:筛出质数的\(f\) =====> 筛出所有数的\(f\)。
其中筛质数时,用总答案减去不合法 ; 筛所有数的时候,直接正向计算所有的答案。

step2. 筛质数的答案

min_25筛分两步走,首先对于所有\(N = \lfloor \frac{n}{x} \rfloor\) 筛出\(\sum_{i=1}^N [i\in P] f(i)\) 。
把小于等于根号\(n\)的质数筛出来构成\(P\)集合。
又因为\(f(p)\)可以表示为简单多项式,所以:
\[\sum_{i=1}^N [i\in P] f(i) = \sum_{i=1}^N [i\in P] \sum_{k=0}^{\inf} coef_k i^k = \sum_{k=0}^{\inf} coef_k \sum_{i=1}^N [i\in P] i^k\]
所以我们要求的东西其实是\(\sum_{i=1}^n [i\in P] i^k\) 。
这个东西怎么求网上博客都写的很清楚了,设\(g(n,j) = \sum_{i=1}^n [i\in P \ or\ p_{min}(i) > p_j] f(i)\)。
然后按照\(j\)分层处理,得到:
\[g(n,j) = g(n,j-1) - p_j^k (g(\lfloor\frac{n}{p_j}\rfloor , j-1) - g(p_{j-1},j-1))\]
其中\(p_j^2 \leq n\) 。
显然,因为我们把所有数的\(f\)都当成质数的方法来算,所以只有\(g(n,P)\)是真的,其他\(g\)都是假的。
不过没有关系,反正后面的筛法中也只需要用到\(g(n,P)\)。
但是我们也可以利用这些假的\(g\)来搞事情。
这个过程如果深入来看是什么呢?就是那个丑的不行的O(ln)埃式筛
第\(j\)次操作后,剩余集合的\(f\)之和就是\(g(n,j)\)。
这个过程是怎么实现的呢?观察上式右半部分,
我们每次计算了最小质因子等于当前枚举因子\(p_j\)的函数值之和,然后把它去掉。
这可以看作 用最小质因子\(p_j\)标记了这些合数,注意是合数!
所以如果需要求一些关于最小质因子的东西的合数前缀和时,我们就可以在这里做手脚了。

光说不做假把式,求\(\sum_{i=1}^n [i\not\in P]r(p_{min}(i))i\),其中\(r(x)\)为一个关于\(x\)的函数。
咋做?
我们直接筛\(\sum_{i=1}^n [i\in P]i\)这个东西,但光筛这个是不行的,因为还要加上\(r(p_{min}(i))\)的贡献。
注意到我们每次删去合数的答案时,我们是用最小质因子\(p_{min}(i)\)标记的。
所以每一层\(j\)中,
\(h(j) = p_j (g(\lfloor\frac{n}{p_j}\rfloor , j-1) - g(p_{j-1},j-1))\)不就是以\(p_j\)为最小质因子的合数除掉\(p_j\)后的和吗?
当计算\(g(n,j)\)的时候,在每一层直接加上\(r(p_j)h(j)\)即可。

如果是求质数前缀和的话......
这个东西原本的作用不就是筛质数的函数值吗?
如果是求所有数前缀和的话......
喂喂喂,把质数的加上合数的不就是所有数了吗?
还有边界问题,\(g(n,0) = \sum_{i=2}^n i^k\),经典问题人人都会,差分或插值弄一下就行了。
这部分的复杂度是\(O(\frac{n^{\frac{3}{4}}}{logn})\),原因未知。

step3. 筛所有数的答案

对于后半部分,
设\(S(n,j) = \sum_{i=1}^n [p_{min}(i) \geq p_j] f(i)\),等于把\(i\in P\)的条件删掉。
推导什么的咕咕咕网上都有。

  • 质数部分答案:\(g(n,P) - \sum_{k=1}^{j-1} f(p_k)\)
  • 合数部分答案:\(\sum_{k=j}^{|P|} \sum_{e=1}^{p_k^{e+1}\leq n} [f(p_k^e) S(\lfloor \frac{n}{p_k^e} \rfloor ,k+1) + f(p_k^{e+1})]\)

最后那个尾巴\(f(p_k^{e+1})\)是因为形如\(f(p^k)\)的函数值在计算中被咕咕咕了所以要补上。
这个过程可以发现一个非常有意思的事情。
对于任意一个数\(n\),我们计算到它步骤是:质因子从小往大枚举所以:

  • \(1.p_{j-1}\)一定是当前数所包含的上一个质因子。
  • 2.它最大的一个质因子一定是最后枚举到的部分。

所以如果我们求一些与最大/次大质因子有关的东西的前缀和时,我们就可以在这上面做手脚了。
先看求最大质因子特殊贡献。
此时需要满足一个条件:质数的后缀贡献好求。
在求解\(S\)的过程中,我们可以强制当前这一层可选的\(p_j...p_{|P|}\)为最大质因子
这样就可以在算质数部分答案的时候,直接把最大质因子\(r(p_{max}(i))\)的贡献直接加上了。
当然前提是这个后缀贡献好加(说句实话很多时侯这个条件都不满足)。
然后我们就处理了形如\(n = w * p_{max}\)的数的贡献添加。
若这个数\(n = w * p_{max}^k,k>1\),我们在质数答案部分是无法添加贡献的。
然而如果明白了min_25筛原理就可以发现,其实只需要在那个尾巴\(f(p_{k}^{e+1})\)处加上贡献就行了。
然后如果是处理次大质因子特殊贡献的话,其实还更好求了。
根据上述,我们知道在\(S(n,j)\)这个状态时,我们上一层选择的质因子一定是\(p_{j-1}\)。
所以类似的强制当前层选择的\(p\)为最大质因子,然后使用\(p_{j-1}\)在当前层做特殊贡献。
当然注意要特判这个数形如\(w*p_{max}^k,k>1\)的情况,此时在那个尾巴出处理一下即可。
还能干其它的吗?
可以。
注意到对于一个数,我们在每一层枚举的是一个本质不同的质因子。
所以我们还可以处理与特定质因子有关的前缀和计算。
当然注意时刻要记得质数的部分特殊处理,所以筛\(g\)的时候也要特殊处理一下特定质因子。
即那些特殊质因子在\(g\)中的贡献也得是它们特殊形式的贡献。
处理\(g\)中的特殊质因子可以按照以下步骤:

  • 把特殊质因子全部拿出来排序,求它们原本形式的\(f\)、特殊形式的\(f'\)的前缀和。
  • 按照一般方法把\(g\)给求出来。
  • 对于每个\(g\),二分得到其包含的特殊质因子范围,用前缀和把原来答案减掉,新答案加上。

光说不练假把式。

例:求\(\sum_{i=1}^n [gcd(i,K)=1]\mu(i)\) , 其中\(n\leq 10^{10}\) 。

说实话如果不是学了min_25筛,我这辈子都不会觉得这玩意能求。
知道了上面的套路后,这个东西就变得很简单了,
原式即\(\sum_{i=1}^n \mu(i)\)减去包含某些特定质因子的数的贡献,直接在min_25筛的后半部分判一下就行了。
简单吧......

这部分的复杂度是\(O(\frac{n}{poly(logn)})\),原因同样未知。

总结

min_25筛除了可以筛积性函数前缀和外,还有许多其他应用。
min_25筛在处理与数的因子有关的前缀和计算时,有奇效,非常的好用。
常见模型都包含在上文中了:

  • 筛某积性函数前缀和 (标准形式模板题)
  • 处理"最小质因子特殊贡献"前缀和 (第一部分求\(g\)变形)
  • 处理"最大值因子/次大质因子特殊贡献"前缀和。 (第二部分求\(S\)变形)
  • 处理"特定质因子特殊贡献"前缀和。 (第一部分求\(g\)特殊处理,第二部分求\(S\)变形)

这玩意儿这么灵活感觉可以放肆出题啊.......迟早要完......瑟瑟发抖......
就酱(QwQ)。

关于min_25筛的一些理解的更多相关文章

  1. 模板 - 数学 - 数论 - Min_25筛

    终于知道发明者的正确的名字了,是Min_25,这个筛法速度为亚线性的\(O(\frac{n^{\frac{3}{4}}}{\log x})\),用于求解具有下面性质的积性函数的前缀和: 在 \(p\) ...

  2. min_25筛

    min_25筛 用来干啥? 考虑一个积性函数\(F(x)\),用来快速计算前缀和\[\sum_{i=1}^nF(i)\] 当然,这个积性函数要满足\(F(x),x\in Prime\)可以用多项式表示 ...

  3. Min_25 筛小结

    Min_25 筛这个东西,完全理解花了我很长的时间,所以写点东西来记录一些自己的理解. 它能做什么 对于某个数论函数 \(f\),如果满足以下几个条件,那么它就可以用 Min_25 筛来快速求出这个函 ...

  4. [复习]莫比乌斯反演,杜教筛,min_25筛

    [复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...

  5. LOJ 6053 简单的函数——min_25筛

    题目:https://loj.ac/problem/6053 min_25筛:https://www.cnblogs.com/cjyyb/p/9185093.html 这里把计算 s( n , j ) ...

  6. luogu P5325 Min_25筛

    LINK:Min_25筛 新版感觉有点鬼畜 而且旧版的也够用了至少. 这个并不算很简单也不算很困难的知识点 学起来还是很麻烦的. (误入了很多dalao的blog 说的云里雾里的 甚是懵逼 这里推荐几 ...

  7. Min_25筛 学习小记

    前言 为什么叫学习小记呢?因为暂时除了模板题就没有做其他的东西了.(雾 这个东西折磨了我一整天,看得我身不如死,只好结合代码理解题解,差点死在机房.(话说半天综合半天竞赛真是害人不浅) 为了以后忘了再 ...

  8. Note -「Min_25 筛」“你就说这素因子你要不要吧?你要不要?”

      赛上想写,Track Lost 了属于是. \(\mathscr{Intro}\)   Min_25 筛是用于求积性函数前缀和,同时顺带求出一些"有意思"的信息的筛法.   一 ...

  9. Min_25 筛与杜教筛

    杜教筛 \(\) 是 \(\) 的前缀和,\(\), \(\) 同理. 假设 \( × = ℎ\) ,并且 \(, \) 易求出,\(\) 难求出. 那么 \[H () = \sum_{ \cdot ...

随机推荐

  1. SSM+BootStrap增删改查,以及头像上传

    先看界面 点击编辑之后 具体代码请往下看 一.jsp界面 <%@ page language="java" contentType="text/html; char ...

  2. 虚拟机vbox

    https://www.virtualbox.org/wiki/Linux_Downloads 一直在报内核出错的问题,我尝试了各种方法还是无果,猜测是版本的问题,这里推荐各位安装virtualbox ...

  3. 插件GsonFormat快速生成JSon实体类

    IntelliJ IDEA 个人觉得是目前最好最强最智能的Java IDE,默认已经集成了几乎所有主流的开发工具和框架. 1.常用工具支持Java日常开发需要接触到很多常用的工具,为了便于使用,很多工 ...

  4. Telephone Phrases

    There are some common phrases and sentences you can use when speaking on the telephone. The informal ...

  5. PHP 设置调试工具XDebug PHPStorm IDE

    先下载PHP扩展Xdebug https://xdebug.org, 可以复制自己的phpinfo粘贴到https://xdebug.org/wizard.php中, 会生成需要下载的版本, php. ...

  6. mariadb第二章-增删改

    MariaDB 数据类型 MariaDB数据类型可以分为数字,日期和时间以及字符串值. 使用数据类型的原则:够用就行, 尽量使用范围小的,而不用大的 常用的数据类型 整数:int, bit 小数:de ...

  7. og标签对SEO的作用及用法

    meta property=og标签对SEO的作用及用法,如果你仔细观察会发现本站点<head>代码中有一段:"property="og:image"这段代码 ...

  8. left join 右表数据不唯一的情况解决方法

    https://blog.csdn.net/u010089432/article/details/52165026

  9. 分页查询信息(使用jdbc连接mysql数据库实现分页查询任务)

             分页查询信息       使用jdbc连接mysql数据库实现分页查询任务 通过mysql数据库提供的分页机制,实现商品信息的分页查询功能,将查询到的信息显示到jsp页面上. 本项目 ...

  10. 20135327郭皓--Linux内核分析第八周 进程的切换和系统的一般执行过程

    第八周 进程的切换和系统的一般执行过程 一.进程切换的关键代码switch_to分析 1.进程调度与进程调度的时机分析 不同类型的进程有不同的调度需求 第一种分类: I/O-bound:频繁进行I/O ...