传统的素数求法对于一个数需要从1跑到根号n,时间复杂度比较高,而且只能用一次。
素数筛选只需要预处理一次,后面的计算只需要一次就能求得解。
素筛原理是遍历1到根号n的所有素数(未被标记的数),把他们的整数倍都标记。
#include<string.h>
const int N = 1000005;
bool prim[N];
void isprim()
{
memset(prim,true,sizeof(prim));
for(int i=2;i*i<N;i++){
if(prim[i]){
for(int j=i*i;j<N;j=j+i){
prim[j]=false;
}
}
}
}