Cod sursa(job #485980)

Utilizator ovidiu.porumbOvidiu Porumb ovidiu.porumb Data 20 septembrie 2010 11:30:39
Problema Ciurul lui Eratosthenes Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
#include <math.h>


long numere[2000000];

using namespace std;

/*
void ciur_eratostene(int n)
{
    int i,j, q;

    q=sqrt(n);

    for(i=2; i<=3; i++)
      for(j=i; j<=n/2; j++)
        numere[j*i]=1;

    for(i=5; i<=q; i=(i << 1)+1)
      for(j=i; j<=q; j=(j << 1)+1)
        numere[j*i]=1;


    return;
}
*/
long ciur_eratostene(long n)
{
    int i, j;
    long contor=1;

    for(i=3; i<=n; i+=2)
      if(!numere[i])
        {
            contor++;
            for(j=i+i+i; j<=n; j+=i+i)
              numere[j]=1;
        }


    return contor;
}

int main(void)
{
    ifstream fin("ciur.in");
    ofstream fout("ciur.out");

    long n;
    long k;

    fin>>n;
    k=ciur_eratostene(n);

    fout<<k<<'\n';

    return 0;
}