#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;}