Cod sursa(job #485460)

Utilizator ovidiu.porumbOvidiu Porumb ovidiu.porumb Data 18 septembrie 2010 13:38:50
Problema Ciurul lui Eratosthenes Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>
#include <math.h>


int numere[100000];

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;
}
*/
void ciur_eratostene(int n)
{
    int i,j, q;

    q=sqrt(n);

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


    return;
}

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

    int n, i, k=0;

    fin>>n;
    ciur_eratostene(n);

    for(i=2; i<=n; i++)
      if( !numere[i])
        k++;

    fout<<k<<'\n';

    return 0;
}