质数打表相关

求<=K的所有质数

 

#include<cstdio>
#include<queue>
#include<stack>
#include<algorithm>
#include<cstring>
#include<string>
#include<vector>
#include<iostream>
#include<map>
using namespace std;
const int MAXN=1e7+10;
int prime[MAXN];
bool isprime[MAXN];
int main()
{
    int K;
    cin>>K;
    for(int i=0;i<=K;i++)isprime[i]=true;
    isprime[0]=isprime[1]=false;
    int prime_cnt=0;
    for(int i=2;i<=K;i++)
    {
        if(isprime[i])
        {
            prime[++prime_cnt]=i;
            for(int j=2*i;j<=K;j+=i)isprime[j]=false;
        }
    }
    for(int i=1;i<=prime_cnt;i++)cout<<prime[i]<<endl;
    return 0;
}

 

然而这只是埃氏筛法,更快的是欧拉筛法。

    memset(isprime,true,sizeof(isprime));
    isprime[0]=isprime[1]=false;
    int prime_cnt=0;
    for(int i=2;i<MAXN;i++)
    {
        if(isprime[i])
        {
            prime[++prime_cnt]=i;
            //for(int j=2*i;j<=MAXN;j+=i)isprime[j]=false;
        }
        for(int j=1;j<=prime_cnt&&i*prime[j]<MAXN;j++)
        {
            isprime[i*prime[j]]=false;
            if(i%prime[j]==0)break;
        }
    }
    //for(int i=1;i<=100;i++)cout<<prime[i]<<endl;
    //return 0;

 

posted @ 2020-12-30 15:33  TheDa  阅读(67)  评论(0编辑  收藏  举报