埃氏筛详解
埃氏筛是什么
埃氏筛不是一个很难的东西,只是一个素数筛法(素数,也称质数),大家想,用普通的判断方法筛出1~300000的素数要用多长时间?那可不是一个小数目,使用埃氏筛法可以大大的提升晒的效率。
怎么筛
其实很简单,我们从2开始筛(埃氏筛可能也比较耗时,欧拉筛是其进化版),把2的倍数全部标记,如4、6、8、10等,然后到3,2没有标记3,所以的话把三的倍数标记起来(本身不标记),再看4,既然已经被标记过了,那么就直接跳过,以此类推,秘籍->可以使用布尔数组进行标记,比如要标记4,就把数组为4的位置变成1,没被标记的就为0
核心代码
想抄?不给!只列出核心部分。
for(int i=2;i<=n;i++){\\从2开始筛,筛到n也就是规定的终点if(!a[i]){\\a数组用于标记int c=i*2; while(c<=n){a[c]=1;\\标记c+=i;}}
}
\\作者现编的,不知道准不准,反正差不多是这样的
至于输出部分嘛,给个提示,如果筛完后a数组某个下标对应的值为0,那么这个下标就是素数,例如a[7]为0,那么7是素数