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算过了,直接跳过就行。
因为数据范围越大,质数率越小(我在颅内证明了一下,应该是对的吧 吧),所以挺稳定的。
最后吐槽一下洛谷某些红名大牛的题解,写了个我上面的第二种还自称线性筛