Cod sursa(job #1321560)

Utilizator ZenusTudor Costin Razvan Zenus Data 19 ianuarie 2015 12:04:48
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <cstdio>

using namespace std;

#define BSIZE 65536
#define NMAX 2000007

int sol,i,N,j,p;
bool prim[NMAX];
char buffer[BSIZE];

int readInt()
{
    int number=0,sgn=1;

    while (!('0'<=buffer[p] && buffer[p]<='9'))
    {
        if (buffer[p]=='-') sgn=-1;

        if (p==BSIZE-1)
        {
            fread(buffer,1,BSIZE,stdin);
            p=0;
        } else ++p;
    }

    while ('0'<=buffer[p] && buffer[p]<='9')
    {
        number=number*10+buffer[p]-'0';

        if (p==BSIZE-1)
        {
            fread(buffer,1,BSIZE,stdin);
            p=0;
        } else ++p;
    }

    return sgn*number;
}

int main()
{
freopen("ciur.in","r",stdin);
freopen("ciur.out","w",stdout);

fread(buffer,1,BSIZE,stdin);

N=readInt();

for (i=2;i*i<=N;++i)
if (!prim[i])
{
    for (j=2*i;j<=N;j+=i)
    prim[j]=true;
}

for (i=2;i<=N;++i)
sol+=(!prim[i]);

printf("%d\n",sol);

return 0;
}