Cod sursa(job #1013241)

Utilizator romykPrehari Romica romyk Data 20 octombrie 2013 17:48:17
Problema Ciurul lui Eratosthenes Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.15 kb
#include <math.h>
#include <stdio.h>
#include <stdbool.h>
#define MAXSIZE 2000001
#define S 6
#define U 1

bool a[MAXSIZE];
void markup(bool a[],long long i, long long i11,long n)
{  long long j,j2;
    for( j =i11+i-1; j<= n; j += i11 )
                {
                    a[j]=true;}
         for(j2 = pow(i-1,2);j2 <= n;j2 += i11 )
                       {
                        a[j2]=true;
                        }
}
void markdown(bool a[],long long i, long long i22,long n)
{
    long long j;

     for(j =pow(i+1,2) ; j <= n ; j += i22)
                a[j]=true;
}
int sieve(long n)
{
    long p,i,m=2;
    p=n/3;
    for( i= 6 ; i <=p ; i += 6)
    {
          if(! a [ i-U ])
            markup(a,i,(i-1)*6,n);
        if(! a [ i+1 ])
           markdown(a,i,(i+1)*6,n);


        }
 for(i=6;i<n;i+=6,m+=!a[i+1]+!a[i-1]);

    if(n%6==0)
    return m-!a[n-1];
    else
      if((n+1)%6==0)
     return m+!a[n];
      else
       return m;


}
int main()
{
    int n;
    //freopen("ciur.in","r",stdin);
   // freopen("ciur.out","w",stdout);
    scanf("%i",&n);

    printf("%i",sieve(n));

     return 0;
}