![]()
WA:
for (int i=2;i<N;i++){
if (!vis[i]){
p[cnt++]=i;
}
for (int j=0;p[j]<N/i;j++){
vis[p[j]*i]=true;
if (i%p[j]==0){
break;
}
}
}
AC:
vis[1]=true;
for (int i=2;i<=N-2;i++){
if (!vis[i]){
p[cnt++]=i;
}
for (int j=0;p[j]<=(N-2)/i;j++){
vis[p[j]*i]=true;
if (i%p[j]==0){
break;
}
}
}
本文探讨线性筛法(欧拉筛)实现中内层循环边界条件的关键修正:将p[j] < N/i改为p[j] <= (N-2)/i,并强调vis[1]=true的必要性,避免数组越界与合数标记遗漏,确保筛法正确性与线性时间复杂度。

225

被折叠的 条评论
为什么被折叠?



