Cod sursa(job #1010502)

Utilizator romykPrehari Romica romyk Data 15 octombrie 2013 00:29:07
Problema Ciurul lui Eratosthenes Scor 80
Compilator c Status done
Runda Arhiva educationala Marime 1.05 kb
#include<math.h>
#include <stdio.h>
#include <stdbool.h>
#define MAXSIZE 10000001
#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-U; 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/(S+U);
    for(i= S ; i <=p ; i += S)
    {
          if(! a [ i-U ])
            markup(a,i,(i-U)*S,n);
        if(! a [ i+1 ])
           markdown(a,i,(i+1)*S,n);


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

     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;
}