筛选法求n以内所有的素数
求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 }