求n以内所有的素数?
筛选法:将2到n中所有的数都列出来,然后从2开始,先化掉所有2的倍数,然后每次从下一个剩下的数(必然是素数)开始,划掉其内所有的倍数,最后剩下来的数就都是素数
例:13 红色为删除的元素
第一轮 2的倍数: 2 3 4 5 6 7 8 9 10 11 12 13
第二轮 3的倍数: 2 3 4 5 6 7 8 9 10 11 12 13
第三轮 5的倍数: 2 3 4 5 6 7 8 9 10 11 12 13
。。。。。
1 #include<iostream>
2
3 using namespace std;
4
5 int main()
6 {
7 int n,i,j;
8
9 cin >> n;
10
11 int *p = new int[n + 1];
12
13 for (i = 0; i <= n; ++i)
14 p[i] = 1;
15
16
17 for (i = 2; i <= n; ++i)
18 {
19 if (p[i])
20 {
21 for (j = 2; i*j <= n; ++j)
22 p[i*j] = 0;
23 }
24 }
25
26 for (i = 2; i <= n; ++i)
27 if (p[i])
28 cout << i << " ";
29
30 cout << endl;
31
32 delete[] p;
33
34 return 0;
35 }
来源:https://www.cnblogs.com/cdp1591652208/p/7461181.html