浅谈埃氏筛

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 

 

以上是关于浅谈埃氏筛的主要内容,如果未能解决你的问题,请参考以下文章

埃氏筛法

素数筛( 埃氏筛线性筛区间筛)

素数筛法(筛线性筛+埃氏筛)

埃氏筛法&欧拉筛法

埃氏筛法

埃氏筛法