Min_25 Sieve 学习笔记
2022/4/3 23:20:40
本文主要是介绍Min_25 Sieve 学习笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
这个东西不是人想的。
解决问题:积性函数前缀和。
适用条件:可以快速计算 \(f(p)\) 的前缀和,\(f(p^k)\) 可以被表示成若干完全积性函数的线性组合(指对应项可以快速组合出来)。
时空复杂度:就当是 \(O(\dfrac{n^\frac{3}{4}}{\log n}+n^{1-\epsilon})-O(\sqrt n)\)。
以下默认 \(f(p)\) 为关于 \(p\) 的单项式,\(p_i\) 为第 \(i\) 个质数。
求质数处的前缀和
我们需要对于每个能被表示成 $\lfloor \dfrac{n}{x}\rfloor $ 的数,求所有在其前的质数 \(p\) 的 \(\sum f(p)\)。注意到一个数的最小质因子小等于 \(\sqrt n\),我们设计一个 dp:\(g_{i,j}\) 表示最小质因子大于 \(p_i\),\([1,j]\) 的所有数的 \(f\) 之和。转移时把最小质因子为 的 \(p_i\) 数的 \(f\) 全部删去,即得转移,注意容斥掉前面的质数的贡献:
\[g_{i,j} = g_{i-1,j} - f(p_i)\big{(}g_{i-1,j/p_i} - \sum_{k\le i}f(p_k)\big{)} \]这就体现出完全积性的重要性。求和号部分可以在线筛质数的时候预处理出来。第一维显然可以滚动数组优化掉,而对于第二维,$\lfloor \dfrac{n}{x}\rfloor $ 只有 \(O(\sqrt n)\) 个,预处理出来,大于 \(\sqrt n\) 的编号为 \(n/\sqrt n\) 即可。
我们把筛去所有最小质因子后的得到的 dp 数组记为 \(g\)。
求原函数前缀和
设 \(s_{n,i}\) 表示 \([1,n]\) 最小质因子大于 \(p_i\) 的所有数的 \(f\) 之和。枚举最小质因子及其次数,得到转移
\[s_{n,i} = g_n - \sum_{j\le i}f(p_j) + \sum\limits_{p_k^t \le n} f(p_k^t)\bigg{(}s_{n/p_k^t},k+1)+[t\gt 1]\bigg{)} \]根据神奇的复杂度分析,可以直接递归下去做。
最后加上 \(1\) 的贡献。
这篇关于Min_25 Sieve 学习笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?