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

将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;
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容