比线性筛垃圾一点的素数筛法

1.n^2的,蛮烂的时间复杂度(本来就想不出正解了还这么浪费时间

for(int i=2;i<=n;i++)
    for(int j=2;j*i<=n;j++)
        noprime[i*j]=1;

2.小小优化

for(int i=2;i<=n;i++)
    if(!noprime[i])
        for(int j=2;j*i<=n;j++)
            noprime[i*j]=1;

对于一个合数,它一定是可以由合数乘上来的。例如

4=2*2

如上例,noprime[4]=1是由2算出的,那么noprime[4j]一定也被2j算过了,直接跳过就行。
因为数据范围越大,质数率越小(我在颅内证明了一下,应该是对的吧 吧),所以挺稳定的。
最后吐槽一下洛谷某些红名大牛的题解,写了个我上面的第二种还自称线性筛

原文地址:https://www.cnblogs.com/syhien/p/7731549.html