用筛法求素数的基本思想是:
把从2到N的一组正整数从小到大按顺序排列。从中依次删除2的倍数、3的倍数、5的倍数,直到根号N的倍数为止,剩余的即为2~N之间的所有素数。如有:
2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
去掉2的倍数(不包括2),余下的数是:
3 5 7 9 11 13 15 17 19 21 23 25 27 29
剩下的数中3最小,去掉3的倍数,如此下去直到所有的数都被筛完,求出的素数为:
2 3 5 7 11 13 17 19 23 29
代码:
#include<iostream> #include<iomanip> using namespace std; int main() { int i,j,k; int arr[98]; for (i = 0; i != 98; ++i) //存2~98 { arr[i] = i + 2; } for (i = 0; i != 98 ; ++i) { for (j = i+1; j != 98; ++j) { if (arr[i] != 0 && arr[j] != 0) { if (arr[j] % arr[i] == 0) //去除倍数 { arr[j] = 0; } } } } for (i = 0,k = 0; i != 98; ++i) { if (arr[i] != 0) { cout << setw(4)<<arr[i]; ++k; } if (k % 10 == 0) //每行输出10个 { cout << endl; k = 0; } } return 0; }
运行结果: