思想:确保每个合数只被最小质因数筛掉。 例如:12=2*2*3,如果通过埃氏筛12会被2和3各筛一次,这就多了一次不必要的操作。但通过线性筛可以确保12只被2筛。 具体实现方法:对于一个质数p,我们所需要筛出的数为2p,3p,…,kp。因为我们每次是从小到大依次枚举,即2,3,…,n。 对比得,第二个数列是第一个数列的系数。所以我们不需要用一个for循环去筛除一个质数的所有倍数,我们将所有质数存储到primes数组中,然后枚举到第i个数时,就筛去所有的primes[j] * i。这样就在每一次遍历中,正好筛除了所有已知素数的i倍。 注意,当i%primes[j]==0, 我们就结束内层循环。 ...