首先两个筛法均是在解决计算和筛选1~n中质数的个数的背景下提出的
由基础的数学知识可知
埃氏筛法详解
欧拉线性筛法详解
首先欧拉线性筛法是基于埃氏筛法的不足之处进行演变的来的
即每个合数均只被其最小的质因子表示
思路分析:
设primes[j]为i的最小质因子,则i的其他大于primes[j]质因子不能用来更新i;
写法为:
for(int i=2;i<=n;i++){
if(!st[i])primes[cnt++]=i;
for(int j=0;i<cnt && primes[j]*i<=n;j++){
st[primes[j]*i]=true;
if(i%primes[j]==0)break;
/*
如果primes[j]为i的最小质因数则跳出循环
这一步非常重要,如果i%primes[j]==0没有跳出
并且进入下一层循环就会造成2*3==6和3*2==6重复出现的情况
就相当于没有优化
*/
}
}