数学:埃拉托斯特尼筛法

埃筛在ACM中不可用

其实就是筛素数,我找到完整的名字了!

要得到自然数n以内的全部素数,必须把不大于 的所有素数的倍数剔除,剩下的就是素数

我找的例题比较神奇,它限制了空间1MB,这样的话假如我要找出第n个素数是什么,我筛的范围就要比n要大很多

但是到底大多少呢?不清楚,但是这个题空间限定了,只能一个一个判断,我这里强行线性筛了

根据数据得到了最大筛到多少

其实如果空间够的话,尽可能多筛一些也是可以的,这里就涉及一个时空权衡的问题

 1 #include<cstdio>
 2 #include<cmath>
 3 using namespace std;
 4 const int maxn=373682;
 5 bool v[maxn];
 6 int n;
 7 void sieve(int x)
 8 {
 9     int m=int(sqrt(x)+0.5);
10     for(int i=2;i<=m;i++)
11         if(!v[i])
12             for(int j=i*i;j<=x;j+=i)
13                 v[j]=1;
14 }
15 int main()
16 {
17     scanf("%d",&n);
18     sieve(maxn);
19     int cnt=0;
20     for(int i=2;i<n;i++)
21     {
22         if(!v[i])
23             printf("%d
",i);
24     }
25     return 0;
26 }
原文地址:https://www.cnblogs.com/aininot260/p/9477705.html