筛选法求素数
输入m、n(m,n<100),输出[m,n]之间的素数。要求:使用筛选法求素数。
求100以内素数的筛选过程:在一张纸上写上1到100全部整数,然后逐个判断它们是否是素数, 找出所有的非素数,把它挖掉,最后剩下的就是素数。提示:可以将1100这些数存储于数组1100下标,挖掉的数据置为0。
具体做法如下:
<1> 先将1挖掉(因为1不是素数)。
<2> 找到数组中第一个非零值(2),把2的倍数挖掉。
<3> 重复步骤<2>,再把3,。。。的倍数挖掉,直至11时结束(实际上可以挖掉7的倍数后即可结束)。
<4> 数组中非零值即为素数。
Sample Input
5 19
Sample Output
5 7 11 13 17 19
#include<iostream>
using namespace std;
const int Max = 101;
int main()
{
int a[Max], i, j,m,n;
for (i = 1; i < 101; i++)//可以将1~100这些数存储于数组1~100下标
a[i] = i;
a[1] = 0;//挖掉的数据置为0
for (j = 2; j <= 11;j++)
for (i = j + 1; i < 101; i++)//遍历数组将符合条件的置为0
if (a[i] % j == 0)
a[i] = 0;
cin >> m >> n;
for (i = m; i <= n; i++)
if (a[i] != 0)//数组中非零值即为素数
cout << a[i] << " ";
cout << endl;
return 0;
}