一、题目
二、解题方法
1、朴素筛法
对于每个数,筛掉他的所有倍数
复杂度:2要筛n / 2 次,3要筛n / 3次,所以一共要筛n / 2 + n / 3 + …n / n,也就是 n * (1 / 2 + 1 / 3 + … + 1 / n)次,后面求和是调和级数,当 n 足够大时,等于lnn + c,c是常数,所以复杂度为 logn * n.
2、埃氏筛法
对于上面的朴素筛法,可以发现不需要对每个数都进行筛倍数,只需要对质数筛即可,因为任何一个合数都会先被他的最小质因子筛掉。所以只需将筛倍数的循环放到 if 里面即可。
复杂度:质数定理:1 - n 中质数的数量是 n / lnn 个,所以埃氏筛法的复杂度为 n * loglog n,很接近线性了。