关于min_25筛的一些理解
关于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筛的一些理解的更多相关文章
- 模板 - 数学 - 数论 - Min_25筛
终于知道发明者的正确的名字了,是Min_25,这个筛法速度为亚线性的\(O(\frac{n^{\frac{3}{4}}}{\log x})\),用于求解具有下面性质的积性函数的前缀和: 在 \(p\) ...
- min_25筛
min_25筛 用来干啥? 考虑一个积性函数\(F(x)\),用来快速计算前缀和\[\sum_{i=1}^nF(i)\] 当然,这个积性函数要满足\(F(x),x\in Prime\)可以用多项式表示 ...
- Min_25 筛小结
Min_25 筛这个东西,完全理解花了我很长的时间,所以写点东西来记录一些自己的理解. 它能做什么 对于某个数论函数 \(f\),如果满足以下几个条件,那么它就可以用 Min_25 筛来快速求出这个函 ...
- [复习]莫比乌斯反演,杜教筛,min_25筛
[复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...
- LOJ 6053 简单的函数——min_25筛
题目:https://loj.ac/problem/6053 min_25筛:https://www.cnblogs.com/cjyyb/p/9185093.html 这里把计算 s( n , j ) ...
- luogu P5325 Min_25筛
LINK:Min_25筛 新版感觉有点鬼畜 而且旧版的也够用了至少. 这个并不算很简单也不算很困难的知识点 学起来还是很麻烦的. (误入了很多dalao的blog 说的云里雾里的 甚是懵逼 这里推荐几 ...
- Min_25筛 学习小记
前言 为什么叫学习小记呢?因为暂时除了模板题就没有做其他的东西了.(雾 这个东西折磨了我一整天,看得我身不如死,只好结合代码理解题解,差点死在机房.(话说半天综合半天竞赛真是害人不浅) 为了以后忘了再 ...
- Note -「Min_25 筛」“你就说这素因子你要不要吧?你要不要?”
赛上想写,Track Lost 了属于是. \(\mathscr{Intro}\) Min_25 筛是用于求积性函数前缀和,同时顺带求出一些"有意思"的信息的筛法. 一 ...
- Min_25 筛与杜教筛
杜教筛 \(\) 是 \(\) 的前缀和,\(\), \(\) 同理. 假设 \( × = ℎ\) ,并且 \(, \) 易求出,\(\) 难求出. 那么 \[H () = \sum_{ \cdot ...
随机推荐
- BZOJ2154/BZOJ2693/Luogu1829 Crash的数字表格/JZPFAR 莫比乌斯反演
传送门--Luogu 传送门--BZOJ2154 BZOJ2693是权限题 其中JZPFAR是多组询问,Crash的数字表格是单组询问 先推式子(默认\(N \leq M\),所有分数下取整) \(\ ...
- Rabbitmq-direct演示
在上一节中我们创建了一个日志系统.实现将日志消息广播给所有的cusumer. 在这片教程中,我们将为日志系统添加一个功能:仅仅订阅一部分消息.比如:我们可以直接将关键的错误类型日志消息保存到日志文件中 ...
- electron 开发实时加载
第一个方式 cnpm install electron-reload --save-dev cnpm install electron-prebuilt --save-dev require('ele ...
- ABP从入门到精通(5):.扩展国际化语言资源
ABP的有些组件使用的该组件自带的语言包资源,所以在有些时候会因为我们当前使用的语言对应的语言包不全,而造成日志一直记录WARN.ABP给我们提供了扩展语言包资源的接口,可以解决这个问题. 以下示例代 ...
- ASP.NETZERO 开发者指南-目录篇
前面的话 此教程适用于 ASP.NET MVC 5.x & Angularjs 1.x 的ABP框架(收费需要授权) 所以有能力的朋友还是希望你们多多支持 土牛.购买链接:https://w ...
- Quartz_配置
quartz_jobs.xml job 任务 其实就是1.x版本中的<job-detail>,这个节点是用来定义每个具体的任务的,多个任务请创建多个job节点即可 name(必填) 任务名 ...
- Asp.Net_ 服务端向客户端写JavaScript脚本
在Asp.net 服务端处理脚本,一般都用 ClientScriptManager ,即web窗体服务端的this.ClientScript.该对象比较常用的方法: 1.RegisterArrayDe ...
- 后台跑包方法 断开ssh程序也能继续执行的方法screen命令
aircrack-ng -w 字典路径 握手包路径 screen -S 001创建会话 screen -ls 列出窗口列表 screen -r 5位数字 进入会话指令 如果会话恢复不了,则是有可能 ...
- Week 3 结对编程
Group: 杜正远 潘礼鹏 结对编程: 优点: 集体荣誉感.你们已经是一个集体了,一定得为对方着想负责. 1.看对方的代码,彼此会互相学习到一些奇妙的方法. 2.结对编程能把两个事情分开,降低复杂度 ...
- QT应用在windows和Linux平台的发布指南
环境:QT5.4 Windows下Qt应用的发布 Qt安装路径为:C:\Qt\Qt5.4.0\5.4\mingw491_32\bin 首先确保这个路径不在环境变量中,否则可能不成功. 执行" ...