关于 min_25 筛的入门以及复杂度证明
min_25 筛是由 min_25 大佬使用后普遍推广的一种新型算法,这个算法能在 \(O({n^{3\over 4}\over log~ n})\) 的复杂度内解决所有的积性函数前缀和求解问题(个人感觉套上素数定理证明的复杂度的话应该要把下面的 log 改成 ln ,不过也差不多啦~)
其实 min_25 筛的入门TXC 大佬的 blog 已经写的非常棒了QVQ
所以搬博客的话鉴于博主太懒了就不干了...直接帮 TXC 大佬安利博客完事
这篇博客主要的目的是证明网上大多没有的 min_25 筛的复杂度
所以你首先得学会 min_25 筛...
前置芝士
Min_25 筛
素数定理
proof
首先我们知道 min_25 筛做了两件事:
筛出一个所求函数的质数前缀和
递归/循环 得到所求函数的前缀和
对于第一个部分和第二个部分我们发现都有一个枚举质数的过程,那么我们需要先知道 n 范围内的质数个数
这就需要素数定理了,素数定理指:在 n 以内的素数个数是 \(O({n\over ln~ n})\) 的(下面为了方便起见就用 \(log ~n\) 代替这里的 \(ln~n\) 了 )
至于具体证明就不是本博客的任务了 QVQ
我们可以根据这一点结合埃氏筛法的复杂度得知:
我们在进行 min_25 中处理的 \(2\sqrt n\) 个数的函数前缀和时,一个数 x 被筛到过 \(O({\sqrt x\over log~ \sqrt x})\) 次
并且,无论是筛出所求函数关于 x 的质数前缀和还是全部的前缀和,都是这个次数(如果你写过循环代替递归版的 min_25 的话,就更加清楚这是为什么了)
这里可以贴出我写的一种 min_25 筛的版本(以筛 mu 的前缀和为例):
inline int ID(Rg int x){
return x<=sq?id1[x]:id2[n/x];
}
inline int calc(Rg int k,int j){
return w[k]>=p[j]?h[k]-j+1:0;
}
inline void Min_25(ll n){
sq=sqrt(n),m=0; int tot=0;
for(tot=1;1ll*p[tot]*p[tot]<=n;++tot);
for(Rg ll l=1;l<=n;l=w[m]+1){
w[++m]=n/(n/l),
h[m]=w[m]-1,Mu[m]=0,
//这里的 h 指质数个数的前缀和 , Mu 指莫比乌斯函数的前缀和
if(w[m]<=sq) id1[w[m]]=m;
else id2[w[m]]=m;
}
for(Rg int j=1;j<=tot;++j){
for(Rg int i=m;i&&1ll*p[j]*p[j]<=w[i];--i)
h[i]-=h[ID(w[i]/p[j])]-j+1;
}
for(Rg int j=tot;j;--j){
for(Rg int i=m,k;i&&1ll*p[j]*p[j]<=w[i];--i)
Mu[i]-=Mu[k]-calc(k,j+1);
}
for(Rg int i=m;i;--i) Mu[i]-=h[i];
}
不压行真的好难受嘤嘤嘤...
我们发现上面筛出 mu 前缀和的时候两个处理部分都是用了极其类似的双重循环,(并且保证了答案是对的...),那么也就可以证明上面的说法了
所以我们就可以列出复杂度的式子:
\]
主定理一波就是:
\]
然后开始积分:
\]
然后正常做法就难搞了,那么我们假一点,反正求的是大致复杂度,那么我们让下面的表达式直接变为 \(log~ n\)(这里把常数直接略去) 这样我们的任务就只剩下求上面表达式的积分了
至于这样为什么可行? 我们发现下面的表达式中有一个 log ,虽然我们让下面的表达式都变大了,但在 log 后,不过是少个常数的问题
如果这里有疑问的话,我们也可以把下面的表达式改成最小的 \(log~\sqrt{n}={1\over2}log~\sqrt{n}\),然后我们再把 \(1\over 2\) 忽略,这样的结果和上面是一样的...
于是乎原来的式子就变成了:
\]
\]
上面的那个积分已经是个多项式了:
\]
\]
\]
这样整个 min_25 筛的复杂度就证明完毕啦~
关于 min_25 筛的入门以及复杂度证明的更多相关文章
- min_25筛入门
目录 1.什么是min_25筛 2.前置知识 2.1.数论函数 2.2.埃拉托色尼筛 2.3.欧拉筛 3.min_25筛 3.1.计算质数贡献 3.2.计算总贡献 3.3.实现 4.例题 4.1.[L ...
- 51Nod1222 最小公倍数计数 数论 Min_25 筛
原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1222.html 题意 给定 $a,b$, 求 $$\sum_{n=a}^b \sum_{i=1}^n ...
- LOJ6053 简单的函数 【Min_25筛】【埃拉托斯特尼筛】
先定义几个符号: []:若方括号内为一个值,则向下取整,否则为布尔判断 集合P:素数集合. 题目分析: 题目是一个积性函数.做法之一是洲阁筛,也可以采用Min_25筛. 对于一个可以进行Min_25筛 ...
- [复习]莫比乌斯反演,杜教筛,min_25筛
[复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...
- Min_25 筛
Min_25 筛 yyb好神仙啊 干什么用的 可以在\(O(\frac{n^{\frac 34}}{\log n})\)的时间内求积性函数\(f(x)\)的前缀和. 别问我为什么是这个复杂度 要求\( ...
- 关于min_25筛的一些理解
关于min_25筛的一些理解 如果想看如何筛个普通积性函数啥的,就别往下看了,下面没有的(QwQ). 下文中,所有的\(p\)都代表质数,\(P\)代表质数集合. 注意下文中定义的最小/最大质因子都是 ...
- LOJ #6202. 叶氏筛法(min_25 筛)
题意 求 \([L, R]\) 之间的素数之和 . \(L≤10^{10},2×10^{10} \le R \le 10^{11}\) 题解 一个有点裸的 min_25筛 ? 现在我只会筛素数的前缀和 ...
- 【LOJ#572】Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛)
[LOJ#572]Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛) 题面 LOJ \[ans=\sum_{i=1}^n\sum_{j=1}^n f(gcd(i,j))^k\ ...
- LOJ572. 「LibreOJ Round #11」Misaka Network 与求和 [莫比乌斯反演,杜教筛,min_25筛]
传送门 思路 (以下令\(F(n)=f(n)^k\)) 首先肯定要莫比乌斯反演,那么可以推出: \[ ans=\sum_{T=1}^n \lfloor\frac n T\rfloor^2\sum_{d ...
随机推荐
- odoo11 访问MSQL Server等第三发数据源
odoo框架默认的访问时Postgres数据库,但在实际的应用场景中,不可避免的使用到其他数据库,所以有必要研究如何连接其他第三方数据库,这里分享下OCA的相关模块,具体的源代码在这里. 我将第三方的 ...
- iOS开发基础篇-Button基础
一.简单介绍 UIButton 的功能:响应用户操作.显示文字.显示图片.调整内部图片和文字的位置. 二. UIButton 的状态 UIControlStateNormal :普通状态,为默认情 ...
- jeecg开发环境搭建
Maven安装 步骤见:https://www.cnblogs.com/dyh004/p/8523260.html 修改Maven仓库 1.修改maven仓库存放位置 修改maven仓库存放位置:找到 ...
- JS--编码规范
1. 请修复给定的 js 代码中,函数定义存在的问题 function functions(flag) { if (flag) { function getValue() { return 'a'; ...
- Surjectivity is stable under base change
Nowadays, I close a new small case. Proposition. For a surjective morphism between scheme $X\stackre ...
- 其它综合-CentOS7 忘记root密码
CentOS7 忘记root密码 长时间不用的 CentOS 机器再次开机的时候忽然忘记了密码,总不能就重装一台吧,还有好多服务在机器上,于是决定重置root的密码. 如果是已经开启的机器,需要进行关 ...
- monkey日志管理
日志管理作用 Monkey日志管理是Monkey测试中非常重要的一个环节,通过日志管理分析,可以获取当前测试对象在测试过程中是否会发生异常,以及发生的概率,同时还可以获取对应的错误信息,帮助开发定位和 ...
- Python——列表、元祖、字典 操作方法
一.编码方式占位 1.ASCII码:字母.数字.特殊字符,1个字节占8位 2.Unicode:字母 2字节占16位 / 中文 4字节 占32位 3.UTF8:字母 1字节占8位 / 欧洲 2字节占 ...
- windows下使用hbase/opencv/ffmpeg小记
1.hadoop安装 不同于Ubuntu,win 10下使用hbase需安装hadoop环境,这里有几个坑,首先14年以后,hadoop已不再发布window版本,这里可往官网 http://hado ...
- RazorEngine
目标 使用razorengine编译cshtml页面生静态html 制作一个vs2017的插件,实现右击cshtml文件时,编译该文件. 环境 razorengine4.5 / netframewor ...