#define SIZE 1000
#include <math.h>
bool p[SIZE];
void prime()
{
//我推荐这个算法! 易于理解。 只算奇数部分,时空效率都还不错!
int half=SIZE/2;
int sn = (int) sqrt(double(SIZE));
for (int i = 0; i < half; i++)
p[i] = true;// 初始化全部奇数为素数。p[0]对应3,即p[i]对应2*i+3
for (int i = 0; i < sn; i++) {
if(p[i])//如果 i+i+3 是素数
{
for(int k=i+i+3, j=k*i+k+i; j < half; j+=k)
// 筛法起点是 p[i]所对应素数的平方 k^2
// k^2在 p 中的位置是 k*i+k+i
// 下标 i k*i+k+i
//对应数值 k=i+i+3 k^2
p[j]=false;
}
}
//素数都存放在 p 数组中,p[i]=true代表 i+i+2 是素数。
//举例,3是素数,按3*3,3*5,3*7...的次序筛选,因为只保存奇数,所以不用删3*4,3*6....
}
int main()
{
prime();
return 0;
}