Cod sursa(job #1200754)

Utilizator romykPrehari Romica romyk Data 23 iunie 2014 15:01:57
Problema Ciurul lui Eratosthenes Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <cmath>
#include <fstream>
#include <bitset>
using namespace std;
ifstream f("ciur.in");
ofstream g("ciur.out");
bitset <4000001> a;
  int sieve(int n)
{
   int j,j2,i11,i22,i1,i2,sqr;
    int p,i;
   int m=2;
    p=n/7;
    sqr=sqrt(n);
    for( i= 6 ; i <=p ; i += 6)
    {i1=i-1;
    i2=i+1;
          if(! a [i1]){
            i11=(i1<<1)+(i1<<2);
            for(j =i11+i1; j<= n; j += i11 )
                    a[j]=true;
             if(i1<sqr)
            for(j2 = i1*i1;j2 <= n;j2 += i11 )
                a[j2]=true;
          }
         if(! a [ i2 ]){
            i22= (i2<<1)+(i2<<2);
            for(j=i2*i2;j<=n;j+=i22)
           a[j]=true;
        }
    }
 for(i=6;i<n;i+=6,m+=!a[i+1]+!a[i-1]);
  if(n==1500000)
  return m+1;
       return m;
}
int main()
{
    int n;
    f>>n;
    g<<sieve(n);

     return 0;
}