Friday, November 2, 2012

Sieve of Eratosthenes

#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
using namespace std;
#define siz 10000001
typedef long long ll;
int status[siz+5];
vector <int> prime;

void seive(){
    int i,j,sqrtN;
    for( i = 4; i <= siz; i+=2 ) status[i] = 1;
    status[0]=status[1]=1;

    sqrtN = int(sqrt((double)siz));
    for(i=3;i<=sqrtN;i+=2){
        if(status[i]==0){
            for(j=i*i;j<=siz;j+=(i+i)){
                status[j]=1;
            }
        }
    }
    for(int i=0;i<=siz;i++){
        if(status[i]==0) prime.push_back(i);
    }
}
int main()
{
    ll n;
    seive();
    for(int i=0;i<20;i++)
        cout<<prime[i]<<endl;
    return 0;
}



No comments:

Post a Comment