关于质数筛——数论

埃式筛法

#include 
using namespace std;
bool vis[100000010];	//标记数组 
int n;
int main(){
	scanf("%d",&n);
	vis[0]=vis[1]=1;
	for(int i=2;i*i<=n;i++){	//优化1 
		if(vis[i]!=1){
			for(int j=i*i;j<=n;j+=i){	//优化2 
				vis[j]=1;	//0是质数,1不是 
			}
		}
	}
	for(int i=2;i<=n;i++){
		if(vis[i]==0){
			cout<

 欧拉筛

#include 
using namespace std;
bool vis[100000010];
int n,cnt=0,prime[10000000];
int main(){
	scanf("%d",&n);
	vis[0]=vis[1]=1;
	for(int i=2;i<=n;i++){
		if(!vis[i]){
			prime[++cnt]=i;
		}
		for(int j=1;j<=cnt&&i*prime[j]<=n;j++){
			vis[i*prime[j]]=1;
			if(i%prime[j]==0){
				break;
			}
		}
	}
	for(int i=1;i<=n;i++){
		if(prime[i]==0)
			break;
		printf("%d ",prime[i]);
	}
	return 0;
}

你可能感兴趣的:(爱思创(算法四),算法,c++)