素数:定义为只能被1和自己本身整除的的整数;
通常使用的一种算法就是:查找从1—N的平方根,看有没有能被整除的数,这个方法实现简单,但是对于数据量大的就很不合适;
因此罗列下面的一种改进方法:
1 - 是素数 true
2 - 是素数 ture 因此2的倍数全都不是素数, 所以2的倍数全为 false
.
.
递归下去 就可以找到所有的素数了
remark: 一个数,不管它是不是素数,它的倍数一定不是素数
程序如下: 1——Number之间的素数在bVec中设为true
void CalcPrime( UINT Number )
{
for (int i = 0; i <= Number; i++)
{
if (i%2 == 0)
{
bVec.push_back(false);
}
else bVec.push_back(true);
}
bVec[1] = true;
bVec[2] = true; //初始化
for (int i = 3; i <= Number; i++)
{
if (bVec[i])
{
int k = 1;
for (int j = i; j<= Number; j = i*k)
{
bVec[j] = false;
k++;
}
bVec[i] = true;
}
}
}
这样一来就可以很简单的找到一段范围内的所有素数了