Cod sursa(job #1167413)

Utilizator mirceadinoMircea Popoveniuc mirceadino Data 4 aprilie 2014 22:31:02
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include<cstdio>
#include<bitset>

using namespace std;

const int NMAX = 2000000+5;

void Read(),Solve(),Print();

int N,Solution;
bitset<NMAX/2> Sieve;

int main()
{
    Read();
    Solve();
    Print();

    return 0;
}

void Read()
{
    freopen("ciur.in","r",stdin);
    freopen("ciur.out","w",stdout);

    scanf("%d",&N);
}

void Solve()
{
    int i,j,k;

    Solution = 1;

    for(i = 3, j = 1; i*i <= N; i += 2, j++)
        if(!Sieve[j])
        {
            Solution++;
            for(k = i*i/2; 2*k+1 <= N; k += i)
                Sieve[k] = 1;
        }

    for(; i <= N; i += 2, j++)
        if(!Sieve[j]) Solution++;
}

void Print()
{
    printf("%d\n",Solution);
}