浅谈埃氏筛
Posted michael666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈埃氏筛相关的知识,希望对你有一定的参考价值。
前言
埃氏筛是一种筛2-n的素数方法,但是时间复杂度没有欧拉筛的强,只是O(n*loglogn)但是还是一种比较好理解的筛法
正文
一、素数的定义
质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。(摘自百度百科)
二、算法详解
将2-n所有的数都标记为true,然后循环扫一遍,分别将每一个数的倍数标记为false(筛掉),以此类推。
三、代码实现
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e6; 4 long long cc[maxn]; 5 bool vis[maxn]; 6 long long sum; 7 /*筛素数函数开始*/ 8 void prime(int n) 9 10 sum=0;//sum用来统计素数的个数 11 memset(vis,true,sizeof vis); //将vis数组全部标记为true 12 for(int i=2;i<=n;++i) 13 14 if(vis[i]) 15 16 sum++;//sum随素数数量的增加而增加 17 cc[sum]=i; //将素数储存在cc数组里 18 for(int j=2*i;j<=n;j+=i) 19 20 vis[j]=false;//将不是素数的数标记为false 21 22 23 24 25 /*函数结束*/ 26 int main() 27 28 int n; 29 cin>>n; 30 /*进行n=1时的特判*/ 31 if(n==1) 32 33 cout<<"Possible"<<endl; 34 35 /*特判结束*/ 36 prime(n); 37 for(int i=1;i<=sum;++i) 38 39 cout<<cc[i]<<" ";//输出即可 40 41 return 0; 42 43
以上是关于浅谈埃氏筛的主要内容,如果未能解决你的问题,请参考以下文章