一个数 整除6 的余数 可能是 1,2,3,4,5 但是 余数 为2,3,4的情况下 肯定是合数
/*
***************************************************************
* NAME: select_prime.cpp
* DESC:
* AUTHOR: Liu Dongguo(jealdean@outlook.com)
* VERSION: 1.0
* CREATE: 2015-04-09 13:59:45
* LUTIME: 2015-04-10 01:53:40
*
* Copyright (c) 2007 - 2015 Abodu.com,Inc. All Rights Reserved
*
***************************************************************
*/
#include <stdio.h>
#include <math.h>
#include <string.h>
char* GetPrimesLessN(int nSize) //nSize是上限值
{
int fLen= nSize;
char* flag=new char[fLen];//
memset(flag,‘y‘,fLen);
flag[0]=flag[1]=‘s‘; //排除0和1
for(int i=2;i*i<nSize;)
{
for(int j=i*i;j<nSize;j+=i)
{
flag[j]=‘n‘;
}
//探测下一个素数距离当前素数的可能步长
if(i==2) //2特殊:到3 的距离就是1
{
i++;
continue;
}
//2,4,6当中的一个
i+=2;
if(flag[i]==‘n‘) //2被标记过
{
i+=2;
if(flag[i]==‘n‘) //4前被标记过
i+=2;
}
}
return flag;
}
int main(int argc, char *argv[])
{
int fLen= 10000;
char* fls=GetPrimesLessN(fLen);
int i= 0, cnt= 0;
while(i<=fLen)
{
if(fls[i]==‘y‘) //内容是‘y‘的数组元素下标为素数
{
printf( "%5d ",i );
cnt++;
if(!(cnt%20))
printf("\n");
}
i++;
}
printf( "\n0-%d has %d prime numbers.\n", fLen, cnt );
delete(fls); //释放由GetPrimesLessN分配的内存
return 0;
} /* end main */
原文地址:http://blog.csdn.net/liudglink/article/details/44971625