1.用一个标记数组 a[n]=0 ,其中 a[i]=0 代表 i 为素数,否则为非素数。首先,因为 0和 1 都不是素数,所以,标记 a[0]=a[1]=1;
2.如果当统计到一个素数2时,将2*2,2*3,2*4......................都标记为1,表明不是素数。
#define maxn ..... // 定义一个最大值 bool a[maxn]={0}; // 将每一个数都标记为0 int countPrimes(int n){ int i; int cnt = 0; // 定义一个计数器 int j; a[0] = a[1] = 1; // 0和1都是素数,所以标记为1; for(i = 2; i < n; ++i) { if(!a[i]) { //判断是不是素数 ++cnt; // 如果是加1 for(j = i * i; j < n; j += i) { // j=i*i+i=i(i+1)代表素数x*x,x*(x+1)...... a[j] = 1; // 把不是素数的数标记为1 } } } return cnt; }
08-09
197
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
08-13
930
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)