弱鸡准备校赛的时候看了一下最简单的筛法求素数:
开一个bool数组 奇数为true 偶数为false 因为偶数肯定不是素数嘛
然后遍历 如果a[i]==true 就把所有的i的倍数全设为 false
如此遍历到 sqrt(n)就将所有的小于n的素数全部筛出来了
代码:
for(i=2; i<N; i++) if(i%2==0) prime=false; else prime=true; for(i=3; i<=sqrt(N); i+=2) { if(prime) for(j=i+i; j<N; j+=i) prime=false; }
在此基础上优化的算法是 只存奇数 不存偶数 因为偶数一定不是素数