Cod sursa(job #680880)

Utilizator alexarnautuArnautu Alexandru alexarnautu Data 16 februarie 2012 06:32:50
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <cstdio>
#include <bitset>
#include <cmath>

using namespace std;

FILE * iFile;
FILE * oFile;

long n, i, j, count;
bitset<20000000> nums;

void read()
{
    fscanf(iFile, "%ld", &n);
}

void reduce()
{
    /*for(i=2;i<=sqrt(n);i++)
    {
        if(nums[i] == 0)
        {
            for(j=i+i;j<=n;j=j+i)
            {
                nums[j] = 1;
            }
        }

    }*/
    for(i=4;i<=n;i=i+2)
    {
        nums[i] = 1;
    }
    for(i=3;i<=sqrt(n);i++)
    {
        for(j=i+2*i;j<=n;j = j + 2 * i)
        {
            nums[j] = 1;
        }
    }
}

void show()
{
    for(i=2;i<=n;i++)
    {
        if(nums[i] == 0)
            count++;

    }
    fprintf(oFile, "%ld", count);
}

int main()
{
    iFile = fopen("ciur.in", "r");
    oFile = fopen("ciur.out", "w");

    read();
    reduce();
    show();

    fclose(iFile);
    fclose(oFile);

    return 0;
}