如果你用的是双向链表,如
int next_[N];
int from_[N];
在删除倍数时,要判断是否已被删除
N=1e7+5;
while(m<N){
if(!isprime[m] && cha(m)){//判断是否已被删除
int i=1;
while(m*i<N){
if(!isprime[m*i]){
isprime[(m*i)]=1;
next_[ from_[m*i] ]=next_[m*i];
from_[ next_[m*i] ]=from_[m*i];
}
i++;
}
}
m++;
}