Cod sursa(job #248120)

Utilizator zalmanDanci Emanuel Sebastian zalman Data 24 ianuarie 2009 21:51:19
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <stdio.h>
#include <math.h>
#define true 1
#define false 0

int n;
void sieve(long, long);

int main(void)
{

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

 scanf("%d",&n);
 sieve(1, n);
 
 printf("\n");
 fcloseall();
 return 0;
}

void sieve(long L, long U)
{
 long k=0, i, j, d;
 d=U-L+1;
 char *flag=new char[d];

 for(i=0;i<d;++i)
  flag[i]=true;

 for(i=(L%2!=0);i<d;i+=2)
  flag[i]=false;

 for(i=3;i<=sqrt(U); i+=2)
  {
   if(i>L && !flag[i-L])
    continue;
    j=L/i*i;

    if(j<L)
     j+=i;

    if(j==i)
     j+=i;

     j-=L;

   for(;j<d;j+=i)
    flag[j]=false;
  }

 if(L<=1)
  flag[1-L]=false;
 if(L<=2)
  flag[2-L]=true;

  for(i=0;i<d;i++)
    if(flag[i])
        
     printf("%ld", k);
}