Skip to content

欧拉筛

    m=0;
    for(int i=2;i<=n;++i)vis[i]=1;//假设所有数为质数
    for(int i=2;i<=n;++i){
        if(vis[i])p[++m]=i;//当前是质数
        for(int j=1;j<=m && p[j]*i<=n;++j){//从所有已知质数中从小到大枚举
            vis[p[j]*i]=0;//当前为素数
            if(i%p[j]==0)break;//若当前的i的因数包含p[j],则如果不停,那么i不作为最小质因数筛了下一个数,不满足线性复杂度,如,(3,4)不能筛12,只有(2,6)能
        }
    }