首页 > 其他分享 >筛法学习笔记

筛法学习笔记

时间:2024-04-12 21:55:05浏览次数:18  
标签:frac limits 筛法 int sum 笔记 学习 prm aligned

埃氏筛

枚举质数 \(p_i\) ,每次去除所有是 \(p_i\) 倍数的数,总效率大概是 \(O(n\log\log n)\) 。

int _prm=0,prm[M];bool isprm[M];
void Get_phi(int n){
	for(int i=2;i<=n;i++){
		if(isprm[i]) continue ;
		prm[++_prm]=i;
		for(int j=i*i;j<=n;j+=i) isprm[j]=1;
	}
}

值得一提的,可以通过模拟埃氏筛来快速求得区间素数,处理方式和 Min_25 筛的一部分很像。

线性筛

自行理解吧(

int _prm=0,prm[M];bool isprm[M];
void Pri(int n){
	for(int i=2;i<=n;i++){
		if(!isprm[i]) prm[++_prm]=i;
		for(int j=1;j<=_prm&&i*prm[j]<=n;j++){
			isprm[i*prm[j]]=1;
			if(i%prm[j]==0) break;
		}
	}
}

杜教筛

给出一个积性函数 \(f(x)\) ,求出 \(S(n)=\sum\limits_{i=1}^n f(i)\) 。

\(n\le 10^9\)

利用狄利克雷卷积,找出一个积性函数 \(g(x)\) 。

\[\begin{aligned} \end{aligned} \]

\[\begin{aligned} \sum\limits_{i=1}^n (f*g)(i)=\sum\limits_{i=1}^n \sum\limits_{d|i} f(d)\times g(\frac{i}{d}) \end{aligned} \]

\[\begin{aligned} =\sum\limits_{d=1}^n g(d) \sum\limits_{i=1}^{⌊\frac{n}{d}⌋} f(i) \end{aligned} \]

\[\begin{aligned} =\sum\limits_{d=1}^n g(d)\times S(⌊\frac{n}{d}⌋) \end{aligned} \]

如果知道了 \(g(1)S(n)\) , \(S(n)\) 自然也可以求出来。

\[\begin{aligned} g(1)S(n)=\sum\limits_{d=1}^n g(d)\times S(⌊\frac{n}{d}⌋)-\sum\limits_{d=2}^n g(d)\times S(⌊\frac{n}{d}⌋) \end{aligned} \]

\[\begin{aligned} =\sum\limits_{i=1}^n (f*g)(i)-\sum\limits_{d=2}^n g(d)\times S(⌊\frac{n}{d}⌋) \end{aligned} \]

如果找的那个 \(g(x)\) 可以在很短的时间内算出\(g(x)\) 和 \((f*g)(x)\) 的前缀和 ,那么就可以通过数论分块来递归求解。

假设求 \(g(x)\) 和 \((f*g)(x)\) 的前缀和的复杂度为常数,总的复杂度为 \(\mathcal{O(n^{\frac{3}{4}})}\) 。

经典杜教筛套路

\[f(n)=μ(n)\ \ \ \ \ g(n)=1\ \ \ \ \ (f*g)(n)=[n==1] \]

int _prm=0,prm[M],mu[M],pre_mu[M];bool isprm[M];
void Get_Mu(int n){
	mu[1]=pre_mu[1]=1;
	for(int i=2;i<=n;i++){
		if(!isprm[i]) prm[++_prm]=i,mu[i]=-1;
		for(int j=1;j<=_prm&&i*prm[j]<=n;j++){
			isprm[i*prm[j]]=1;
			if(i%prm[j]==0) break;
			mu[i*prm[j]]=-mu[i];
		}
		pre_mu[i]=pre_mu[i-1]+mu[i];
	}
}

map<int,int> Smu;
int Sum_mu(int n){
	if(n<M) return pre_mu[n];
	if(Smu[n]) return Smu[n];
	int res=1;
	for(int l=2,r=0;l<=n;l=r+1){
		r=(n/(n/l));
		res-=(r-l+1)*Sum_mu(n/l);
	}
	return Smu[n]=res;
}

\[f(n)=φ(n)\ \ \ \ \ g(n)=1\ \ \ \ \ (f*g)(n)=n \]

int _prm=0,prm[M],phi[M],pre_phi[M];bool isprm[M];
void Get_Phi(int n){
	phi[1]=pre_phi[1]=1;
	for(int i=2;i<=n;i++){
		if(!isprm[i]) prm[++_prm]=i,phi[i]=i-1;
		for(int j=1;j<=_prm&&i*prm[j]<=n;j++){
			isprm[i*prm[j]]=1;
			if(i%prm[j]==0){
				phi[i*prm[j]]=phi[i]*prm[j];
				break;
			}
			phi[i*prm[j]]=phi[i]*(prm[j]-1);
		}
		pre_phi[i]=pre_phi[i-1]+phi[i];
	}
}

map<int,int> Sphi;
int Sum_phi(int n){
	if(n<M) return pre_phi[n];
	if(Sphi[n]) return Sphi[n];
	int res=n*(n+1)/2;
	for(int l=2,r=0;l<=n;l=r+1){
		r=(n/(n/l));
		res-=(r-l+1)*Sum_phi(n/l);
	}
	return Sphi[n]=res;
}

\[f(n)=n×φ(n)\ \ \ \ \ g(n)=n\ \ \ \ \ (f*g)(n)=n^2 \]

Min_25筛

这是一个大力推一波不知有何用的式子,然后我也不知道怎么证明但是复杂度就是 \(\mathcal{O(\frac{n^{\frac{3}{4}}}{\log n})}\) 的神仙筛法。

标签:frac,limits,筛法,int,sum,笔记,学习,prm,aligned
From: https://www.cnblogs.com/wzp-blog/p/13736210.html

相关文章

  • 莫队学习笔记
    目录普通莫队初遇——从暴力谈起困境——乱跑的指针优化——顺路而为之带修莫队参考资料普通莫队初遇——从暴力谈起我们通过一道例题来讨论普通莫队。题目链接。观察数据范围,一个很直接的想法是:开一个数组\(cnt\),\(cnt_i\)表示在询问的区间内数字\(i\)出现的次数。对于......
  • 深度学习-nlp-NLP之sequence2sequence--73
    目录1.sequence2sequence任务特点2.编码器与解码器参考:https://zhuanlan.zhihu.com/p/38816145sequence2sequence模型发展到今天,根据不同任务有着不同的变体。了解了最基本的框架之后,再看别的模型就没有太大问题了。1.sequence2sequence任务特点输入输出时不定长的。比......
  • SQL SERVER 从入门到精通 第5版 第三篇 高级应用 第10章 存储过程 读书笔记
    第10章存储过程 >.存储过程概述存储过程(storedprocedure)是预编译SQL语句的集合,这些语句存储在一个名称下并作为一个单元来处理.存储过程取代了传统的逐条执行SQL语句的方式.一个存储过程中可以包含增删改查等一系列SQL语句,当这个存储过程被调用时,这些操作也......
  • 算法学习笔记(13):同余最短路
    同余最短路是一种通过同余把状态分类,再通过建图跑最短路解决问题的算法。可以高效率解决一些特定的问题。非常的奇妙。算法鉴于学不懂,所以直接搬\(oi-wiki\)的题吧。呜呜呜。P3403跳楼机有一栋高为\(h\)的楼,初始在一楼,每次可以向上移动\(x\),\(y\),\(z\)层,也可......
  • node笔记1:vue+node+mongodb+studio 3T创建登录模块
    1.创建node项目:expressnodenpmipackage.json修改如下代码,便于每次修改代码都可以刷新页面:"scripts":{"start":"node-dev./bin/www"}2.如果配合node设置反向代理;3.添加mongoose模块提供数据库信息:npmimongoose--save4.以登录功能模块为例,项目文件如下:model......
  • mysql-子查询的学习
    子查询由一个具体的需求,引入子查询谁的工资比Abel的高SELECT*fromemployeesWHEREsalary>(SELECTsalaryFROMemployeesWHERElast_name='Abel')--自连接SELECTe2.*......
  • 四月十一日软件测试学习
      黑盒测试用例设计方法:1、等价类划分:他的具体操作方法,就是把所有可能的输入数据,包括有效输入数据和无效输入数据,给他划分成若干个等价的子集,给他起个名字就叫做等价类,使得每个子集中的典型值在测试中的作用与这一子集中其他值的作用相同。因为咱们输入的数据分为......
  • Rust教程 – 学习天文图像的多尺度处理
    最近,人们投入了大量精力开发新颖的图像处理技术。其中许多技术都源自于傅里叶和小波变换等数字信号处理方法。这些技术不仅使得各种图像处理技术如降噪、锐化和动态范围扩展成为可能,而且还使得计算机视觉中使用的许多技术如边缘检测、目标检测等成为可能。多尺度分析是相对较新......
  • VUE2.0版本学习笔记
    VUE2.0版本学习笔记脚手架安装npminstall-g@vue/clivuecreatevue2-practice#选择2.0版本如果执行中遇到错误,yarn的错误certificatehasexpired则执行yarncachecleanyarnconfigsetstrict-sslfalsecdvue2-practicenpmrunserve#初学者建议安装vsco......
  • 一些学习资料
    人工智能:机器学习、对环境的感知、实现动作机器学习学习:2.机器学习三要素:数据、算法、模型机器学习研究的是从数据中通过选取合适的算法,自动的归纳逻辑或规则,并根据这个归纳的结果(模型)与新数据来进行预测。3.深度学习是在机器学习的基础上实现的,得益于机器性能的提升。神经......