美文网首页
素数一般筛法(埃拉托斯特尼筛法)

素数一般筛法(埃拉托斯特尼筛法)

作者: myleosu | 来源:发表于2018-03-30 11:01 被阅读0次

    将bool数组设为true,bool[0],bool[1]设为false,然后从2开始,每找到一个素数就将它的倍数筛为false。从2一直筛到MAXN的开平方数即可。(埃拉托斯特尼筛法比较好理解,不理解可以自行百度百科,但这种筛法会重复筛选,所以效率不是最高的)
    附上代码

    #include <iostream>//求第1226564个素数
    #include <cstring>
    #define MAXN 100000000
    #define t 1226564
    using namespace std;
    bool flag[MAXN];
    int num[MAXN];
    int cnt = 1;
    void temp(){
        flag[0] = false;//0不是素数
        flag[1] = false;//1不是素数
        for(int i = 2;i*i<MAXN;i++){//i*i大于MAXN的时候即可退出
            if(flag[i]){
                for(int j = i;i*j<MAXN;j++)
                    flag[i*j] = false;
            }
        }
        for(int i = 1;i<MAXN;i++)
            if(flag[i])
                num[cnt++] = i;
    }
    int main()
    {
        memset(flag,true,sizeof(flag));
        temp();
        cout<<"第"<<t<<"个素数为:"<<num[t];
        return 0;
    }
    
    

    相关文章

      网友评论

          本文标题:素数一般筛法(埃拉托斯特尼筛法)

          本文链接:https://www.haomeiwen.com/subject/egwbcftx.html