#include<cstdio>const int N=100000+5;
bool prime[N];voidinit(){for(int i =2; i <N; i ++) prime[i]=true;for(int i =2; i*i <N; i ++){//判断改成i*i<N if(prime[i]){for(int j = i*i; j <N; j += i){//从i*i开始就可以了
prime[j]=false;}}}}
int main(){init();}
代码 2.线筛
#include<cstdio>const int N=100000+5;
bool prime[N];//prime[i]表示i是不是质数
int p[N], tot;//p[N]用来存质数 voidinit(){for(int i =2; i <N; i ++) prime[i]=true;//初始化为质数 for(int i =2; i <N; i++){if(prime[i]) p[tot ++]= i;//把质数存起来 for(int j =0; j < tot && i * p[j]<N; j++){
prime[i * p[j]]=false;if(i % p[j]==0)break;//保证每个合数被它最小的质因数筛去 }}}
int main(){init();}