埃氏筛
思想:任意整数的倍数都不是质数。
我们可以从222开始,由小到大扫描每一个数,把它的倍数标记为合数。当扫描到一个数时,若它尚未被标记,则它不能被2→x−12\to x-12→x−1之间的任何数整除,该数就是质数。
此外,我们可以发现,222和333都会把666标记为合数。实际上,小于x2x^2x2的xxx的倍数在扫描更小的数时就已经被标记过了。因此,我们可以对埃氏筛进行优化,对于每个数xxx我们只需要从x2x^2x2开始,把之后的xxx的倍数标记为合数即可。
核心代码
void prime(int n){
memset(vis,false,sizeof(vis))<