Cod sursa(job #1892497)

Utilizator romykPrehari Romica romyk Data 25 februarie 2017 00:11:04
Problema Ciurul lui Eratosthenes Scor 90
Compilator c Status done
Runda Arhiva educationala Marime 1.97 kb
#include <stdio.h>
#include <stdbool.h>

#define MAXSIZE 4000001
#define S 6
#define U 1

long long i,n,p,j,j2,i1,i2,i22,i11,k;
int m=2,s;
bool a[MAXSIZE];
int main()
{
    freopen("ciur.in", "r", stdin);
    freopen("ciur.out", "w", stdout);

    scanf("%d", &n);
    //500000000; => 4s
    //500000000; => 3.6s
   // n=500000000;
    for(i= S ; i <=n ; i += S)
    {
        i1 = i - U;
        i2 = i + U;
        if(a [ i1 ] ==0)
        {
            m++;
            if( a [ i2 ] == 0)
             {
                m++;
                k=n /i1;
                for(j= i-1 ; (j) <=k ; j += S)
                {
                    a[(j+2)*i1] = 1;
                    a[(j)*i1] = 1;

                    a[(j+2)*i2] = 1;
                    a[(j)*i2] = 1;
                }
             }
             else
             { k=n /i1;
                for(j= i -1 ; j <=k ; j += S)
                {
                    a[(j+2)*i1] = 1;
                    a[j*i1] = 1;
                }
             }

        }
        else if( a [ i2 ] == 0)
        {
             m++;
              k=n /i2;
            for(j= i -1 ; j <=k ; j += S)
            {
                    a[(j+2)*i2] = 1;
                    a[j*i2] = 1;
            }
        }


    }
/*
    for(i= S ; i <=n ; 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 = i22 + i2 ; j <= n ; j += i22)
                {
                a[j]=1;
                }

        }
     }
     */
     printf("%d\n" , m);
     return 0;
}