原理

Untitled

用内存换速度,空间换时间。这是常用的程序设计思路。反之亦可。

如果只表示两种状态,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;
}