Cod sursa(job #232585)

Utilizator k_ounu_eddyIacob Eduard k_ounu_eddy Data 15 decembrie 2008 20:12:39
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.55 kb
#include<stdio.h>
int n,cnt=0;
char *Prim;

void pregateste()
{
FILE *pin=fopen("ciur.in","r");
fscanf(pin,"%d",&n);
Prim=new char[n/16+2];
for(int i=0;i<=n/16+1;i++)
fclose(pin);}

void rezolva()
{long long int i,j;
for(i=3;i<=n;i+=2)
  if(( Prim[i/16] & (1<<(i/2%8)))==0)
    {
    cnt++;
    for(j=i*i;j<=n;j+=i*2)
      Prim[j/16]|=(1<<(j/2%8));
    }
}

void incheie()
{delete []Prim;
FILE *pout=fopen("ciur.out","w");
fprintf(pout,"%d",cnt+1);
fclose(pout);}

int main()
{
pregateste();
rezolva();
incheie();
return 0;
}