Min_25筛 学习笔记
这儿只是一个简单说明/概括/总结。
原理见这:
https://www.cnblogs.com/cjyyb/p/9185093.html
https://www.cnblogs.com/zhoushuyu/p/9187319.html
首先计算\[g(n,j)=\sum_if(i),\quad i是质数\ 或\ i的最小质因子严格大于P_j\\g(n,j)=\begin{cases}g(n,j-1)&P_j^2\gt n\\ g(n,j-1)-f(P_j)\left[g(\frac{n}{P_j},j-1)-\sum_{i=1}^{j-1}f(P_i)\right]&P_j^2\le n\end{cases}\]
类似埃氏筛法,\(P(n,j)\)就是筛\(j\)次后剩下的数的\(f\)和,再加上所有质数\(p\)的\(f(p)\)之和。
\(P_j^2>n\)时,这一次筛不会筛掉任何数,所以就是\(g(n,j-1)\)。
\(P_j^2\leq n\)时,考虑第\(j\)次筛掉了哪些数,也就是最小质因子是\(P_j\)的那些数。因为是积性函数,所以我们直接提出一个\(P_j\)(来保证它含\(P_j\))。
要被筛掉的数在除掉一个\(P_j\)后的最小质因子一定仍大于等于\(P_j\)(否则在之前就被筛掉了),这符合\(g(\frac{n}{P_j},j-1)\)的定义。所以减掉一个\(f(P_j)g(\frac{n}{P_j},j-1)\)。但是\(g(\frac{n}{P_j},j-1)\)还包含所有质数的\(f(p)\)之和,所以再加上\(\sum_{i=1}^{j-1}f(P_i)\)。
那初值呢?先把所有合数的\(f\)的计算方式看做和质数一样,以便对所有数的\(f\)值快速求个和,用它作为\(g(n,0)\)(注意这里不考虑\(1\))。这样虽然合数的\(f\)值是假的,但是\(g(n,|P|)\)还是能正确的表示所有质数\(p\)的\(f(p)\)之和。
现在考虑算上合数的\(f\)值求和。令\[S(n,j)=\sum_if(i),\quad i是质数\ 或\ i的最小质因子大于等于P_j\]
我们把\(S(n,j)\)分两部分计算,一是所有质数的贡献,二是所有合数的贡献。对于\(f(1)\)最后单独算下。
那么所有质数的贡献可以用\(g\)表示,也就是\(g(n,j)-\sum_{i=1}^{j-1}f(P_i)\)(因为最小质因子要大于等于\(P_j\),所以把那些减掉)。
对于合数,枚举这个合数的最小质因子及其次数,用\(f\)是积性函数的性质直接算:\[S(n,j)=g(n,j)-\sum_{i=1}^{j-1}f(P_i)+\sum_{k=j}^{P_k^2\leq n}\sum_{e=1}^{P_k^{e+1}\leq n}\left[f(P_k^e)\times S(\frac{n}{P_k^e},k+1)+f(P_k^{e+1})\right]\]
\(f(P_k^{e+1})\)是\(S\)没有考虑的那部分(就是\(P_k^{e+1}\),质数的若干次幂这样的合数,而\(S(..,k+1)\)就把这些数忽略掉了)。
答案就是\(S(n,1)+f(1)\)。
流程:
把所有合数看做质数,求一遍和,得到初值\(g(n,0)\)。同时预处理一个\(f(P_i)\)的前缀和。
用\[g(n,j)=\begin{cases}g(n,j-1)&P_j^2\gt n\\ g(n,j-1)-f(P_j)\left[g(\frac{n}{P_j},j-1)-\sum_{i=1}^{j-1}f(P_i)\right]&P_j^2\le n\end{cases}\]
计算\(g(x,|P|)\)(把第二维滚动掉)。用\[S(n,j)=g(n,j)-\sum_{i=1}^{j-1}f(P_i)+\sum_{k=j}^{P_k^2\leq n}\sum_{e=1}^{P_k^{e+1}\leq n}\left[f(P_k^e)\times S(\frac{n}{P_k^e},k+1)+f(P_k^{e+1})\right]\]
计算\(S(n,1)+f(1)\)。
计算\(S,g\)的复杂度都是\(O(\frac{n^{\frac34}}{\log n})\)。
对于其它积性函数,同\(g\)一样计算。
实现上,筛\(sqrt(n)\)内的质数这一步往往可以省略,见这里。
例题:
LOJ6235 区间素数个数
BZOJ3944 Sum
LOJ6053 简单的函数
以后要做的题:
https://cmxrynp.github.io/2018/12/03/Min-25筛学习笔记/
https://blog.csdn.net/koishi_514/article/details/79485534
https://blog.csdn.net/HOWARLI/article/details/80339931
Min_25筛 学习笔记的更多相关文章
- Min_25 筛 学习笔记
原文链接https://www.cnblogs.com/zhouzhendong/p/Min-25.html 前置技能 埃氏筛法 整除分块(这里有提到) 本文概要 1. 问题模型 2. Min_25 ...
- min_25筛学习笔记【待填坑】
看见ntf和pb两位大佬都来学了,然后就不自觉的来学了. 我们考虑这样一个问题. $$ans=\sum_{i=1}^nf(i)$$其中$1\leq n\leq 10^{10}$ 其中$f(i)$是一个 ...
- 洲阁筛 & min_25筛学习笔记
洲阁筛 给定一个积性函数$F(n)$,求$\sum_{i = 1}^{n}F(n)$.并且$F(n)$满足在素数和素数次幂的时候易于计算. 显然有: $\sum_{i = 1}^{n} F(n) = ...
- Min_25筛学习笔记
感觉好好用啊 Luogu上的杜教筛模版题一发 Min_25抢到了 rank1 $ Updated \ on 11.29 $被 STO txc ORZ踩爆啦 前言 $ Min$_$25$筛可以求积性函数 ...
- $Min\_25$筛学习笔记
\(Min\_25\)筛学习笔记 这种神仙东西不写点东西一下就忘了QAQ 资料和代码出处 资料2 资料3 打死我也不承认参考了yyb的 \(Min\_25\)筛可以干嘛?下文中未特殊说明\(P\)均指 ...
- Powerful Number 筛学习笔记
Powerful Number 筛学习笔记 用途 \(Powerful\ number\) 筛可以用来求出一类积性函数的前缀和,最快可以达到根号复杂度. 实现 \(Powerful\ number\) ...
- Min_25筛 学习小记
前言 为什么叫学习小记呢?因为暂时除了模板题就没有做其他的东西了.(雾 这个东西折磨了我一整天,看得我身不如死,只好结合代码理解题解,差点死在机房.(话说半天综合半天竞赛真是害人不浅) 为了以后忘了再 ...
- min-25筛学习笔记
Min_25筛简介 \(\text{min_25}\)筛是一种处理一类积性函数前缀和的算法. 其中这类函数\(f(x)\)要满足\(\sum_{i=1}^{n}[i\in prime]\cdot f( ...
- min_25 筛学习小记
min_25筛 由 dalao min_25 发明的筛子,据说时间复杂度是极其优秀的 \(O(\frac {n^{\frac 3 4}} {\log n})\),常数还小. 1. 质数 \(k\) 次 ...
随机推荐
- 网络扫描信息收集基于(Windows)
1.首先说明一下一款网络扫描工具,在之前的博客中我曾简要的写过关于Advance IP Scanner使用方法,最近要写网络扫描的工具,所以对这款工具做一个详细的功能细节上的介绍. 如下图 在输入框 ...
- cf219d 基础换根法
/*树形dp换根法*/ #include<bits/stdc++.h> using namespace std; #define maxn 200005 ]; int root,n,s,t ...
- 性能测试四十八:Jenkins+Ant+Jmeter系统部署
工作步骤: 1.开发提交代码SVN/Git 2.代码编译.打war包 3.上传war包到服务器 4.重启web服务器 5.开始测试/自动化测试 6.发测试结果 Jenkins工作: 1.开发提交代码G ...
- ES6 Promise 全面总结
转载:点击查看原文 ES6 Promise对象 ES6中,新增了Promise对象,它主要用于处理异步回调代码,让代码不至于陷入回调嵌套的死路中. @-v-@ 1. Promise本质 Promise ...
- Axure实现多用户注册验证
*****多用户登录验证***** 一.(常规想法)方法:工作量较大,做起来繁琐 1.当用户名和密码相同时怎么区分两者,使用冒号和括号来区分: eg. (admin:123456)(123456:de ...
- Django-model基础
Django-model基础 在Django-ORM中表和类存在映射关系 表名<------------>类名 字段<------------>属性 表记录<------ ...
- VS2017远程调试C#或 Visual Studio 中的 Visual Basic 项目
来源:远程调试C#或 Visual Studio 中的 Visual Basic 项目 若要调试已部署在另一台计算机的 Visual Studio 应用程序,安装和在其中部署您的应用程序的计算机上运行 ...
- INFO JobScheduler: Added jobs for time 1524468752000 ms/INFO MemoryStore: Block input-0-1524469143000 stored as bytes in memory/完全分布式 ./bin/run-example streaming.NetworkWordCount localhost 9999无法正常运行
1.完全分布式 ./bin/run-example streaming.NetworkWordCount localhost 9999无法正常运行: 1 [hadoop@slaver1 spark- ...
- zookeeper 学习 客户端Acl操作笔记
Acl = Access control list create /node2 node2data [zk: localhost:2181(CONNECTED) 14] addauth digest ...
- 清北合肥day1
题目: 1.给出一个由0,1组成的环 求最少多少次交换(任意两个位置)使得0,1靠在一起 n<=1000 2.两个数列,支持在第一个数列上区间+1,-1 每次花费为1 求a变成b的最小代价 n& ...