1 for(int i=2;i<=n;++i){ 2 if(!vis[i])p[++cnt]=i; 3 for(int j=1;j<=cnt;++j){ 4 if(i*p[j]>n)break;//超过n 5 vis[i*p[j]]=true; 6 if(i%p[j]==0)break;//保证每个合数被它最小的质因数筛掉(保证算法O(n)复杂度) 7 } 8 }