欧拉筛法 素数

思路:看代码注释

代码:

#include<iostream>//欧拉筛法用了最小质因数,减少了重复筛选的次数 
#include<string.h>//相比于埃氏筛选 
#include<algorithm>
using namespace std;
const int maxn=1e6+5;
int vis[maxn]={0},isp[maxn]={0};
int len=0;//用来记数 
void prime()
{
	for(int i=2;i<=maxn;i++){
		if(!vis[i]) isp[len++]=i;//len用来记数 
		for(int j=0;j<len&&i*isp[j]<=maxn;j++){//因为i从2遍历到maxn,那么 
			vis[i*isp[j]]=1;//每个素数的(i~maxn)倍都会被遍历 
			if(i%isp[j]==0) break;//这样看来显然也会重复筛选很多 
		}		            //所以有了以上这一条 
	}
}
int main()
{
	prime();
	for(int i=0;i<len;i++){
		cout<<isp[i]<<endl;
	} 
}

猜你喜欢

转载自blog.csdn.net/DaDaguai001/article/details/86756695