Cod sursa(job #891901)

Utilizator romykPrehari Romica romyk Data 25 februarie 2013 21:01:23
Problema Ciurul lui Eratosthenes Scor 80
Compilator c Status done
Runda Arhiva educationala Marime 0.99 kb
#include <stdio.h>
#include <stdbool.h>

#define MAXSIZE 2000010
#define S 6
#define U 1

long long i,j,j2,i1,i2,i22,i11;
long m=2,n,p;
bool a[MAXSIZE];

int main()
{
    freopen("ciur.in","r",stdin);
    freopen("ciur.out","w",stdout);
    scanf("%i",&n);
    p=n/7;
    for(i= S ; i <=p ; i += S)
    {
        i1 = i - U;
        i2 = i + U;
        if(! a [ i1 ])
        {
         m++;
            i11 = i1*S;
            for( j =i11+i1, j2 = i1 * i1 ; j<= n; j += i11, j2 += i11 )
                {
                    a[j]|=1;
                    if( j2 <= n )
                        {
                        a[j2]|=1;
                          }}
        }if(! a [ i2 ])
        {             m++;
            i22 = i2*S;
            for(j =i2*i2 ; j <= n ; j += i22)
                {
                a[j]|=1;
                }
}
     }
     for(;i<=n;i+=6)
       {
           m+=!a[i+1]+!a[i-1];
       }


     printf("%d",m);
     return 0;
}