标签:size bool namespace 百度百科 pos 定义 main 复杂度 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
标签:size bool namespace 百度百科 pos 定义 main 复杂度 com
原文地址:https://www.cnblogs.com/Michael666/p/11626860.html