用内存换速度,空间换时间。这是常用的程序设计思路。反之亦可。
如果只表示两种状态,0和1,用char类型的数组更节省空间。
为了避免数组越界,定义数组时,需要的数组个数 + 10
#include<iostream>//筛法求素数
using namespace std;
#define MAX_NUM 10000000
char isPrime[MAX_NUM + 10];//最终如果isPrime[i]为1,则表示i是素数
int main()
{
for(int i = 2;i <= MAX_NUM;++i)//开始假设所有书都是素数
isPrime[i] = 1;
for(int i = 2;i <= MAX_NUM;++i)//每次将一个素数的所有倍数标记为非素数
{
if(isPrime[i])//只标记素数的倍数
{
for(int j = 3 * i;j <= MAX_NUM;j += i)
isPrime[j] = 0;//将素数i的倍数标记为非倍数
}
}
for(int i = 2;i <= MAX_NUM;++i)
if(isPrime[i])
cout << i << endl;
return 0;
}