Cod sursa(job #230466)

Utilizator k_ounu_eddyIacob Eduard k_ounu_eddy Data 13 decembrie 2008 23:57:48
Problema Ciurul lui Eratosthenes Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include<stdio.h>
#include<string.h>

int n,cnt=0;
char *Prime;//Prime[i]==1 => Prime[i] nu e prim


void pregateste()
{FILE *pin=fopen("ciur.in","r");
fscanf(pin,"%d",&n);
Prime=new char[n/8+1];
memset(Prime,0,sizeof(Prime)*(n/8+1));
fclose(pin);}

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

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

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