质数基础筛法

埃氏筛

埃氏筛是一种筛素数的方法,埃氏筛的思想很重要,主要是时间复杂度

朴素的埃氏筛的时间复杂度是O(nlogn)
这个复杂度是调和级数

vector<int>p;
int vis[N];

void solve()
{
	rep(i,2,n){
		if(!vis[i])	p.pb(i);
		for(int j=i+i;j<=n;j+=i)	vis[j]=1;		
	}
}

优化的埃氏筛的时间复杂度O(nloglogn)是很小的,基本上已经接近线性了


int vector<int>p;
vis[N];

void solve()
{
	rep(i,2,n){
		if(!vis[i])	p.pb(i);
		for(int j=i+i;j<=n;j+=i)	vis[j]=1;		
	}
}

线性筛

线性筛的时间复杂度之所以是线性,是因为每个数只会被它的最小素因子筛一次。
image

vector<int>p;
int vis[N];

void solve()
{
	rep(i,2,n){
		if(!vis[i])	p.pb(i);
		for(int j=0;p[j]*i<=n;++j){
			vis[p[j]*i]=1;
			if(i%p[j]==0)	break;
		}	
	}
}

posted @   cxy8  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
点击右上角即可分享
微信分享提示