素数筛

埃氏筛

inline void get_prime(){
	bool limit[N];
	limit[0]=limit[1]=true;
	for(int i=2;i<=n;i++){
		if(!limit[i]){
			prime[++cnt]=i;
			for(int j=i*2;j<=n;j+=i)
				limit[j]=true;
		}
	}
}

线性筛(欧拉筛)

inline void oula_get_prime(){
	bool limit[N];
	limit[0]=limit[1]=true;
	for(int i=2;i<=n;i++){
		if(!limit[i])
			prime[++cnt]=i;
		for(int j=1;j<=cnt&&prime[j]*i<=n;j++){
			limit[prime[j]*i]=true;
			if(i%prime[j]==0)
				break;//如果i已经是prime[j]的倍数,那么就可以退出了
		}
	}
}

posted @ 2020-07-08 23:46  wansheking  阅读(43)  评论(0)    收藏  举报