Cod sursa(job #1017321)

Utilizator romykPrehari Romica romyk Data 27 octombrie 2013 17:33:30
Problema Ciurul lui Eratosthenes Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 kb
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <fstream>
#include <iterator>
#include <assert.h>
using namespace std;
ifstream f("ciur.in");
ofstream g("ciur.out");
const int INF = 0x3f3f3f3f;
  int sieve(int n)
{
  long j,j2,i11,i22;

    std::vector<bool> a(n+1);
    std::fill( a.begin(), a.end(), false );
   long long p,i;
   int m=2;
    p=(long)n/7;
    for( i= 6 ; i <p ; i += 6)
    {
          if(! a [ i - 1 ]){

            i11=( i - 1 ) * 6;

            for(j =i11+i-1; j<= n; j += i11 ){
                    a[j]=true;}
            if(i*i<n)
            for(j2 = (i-1)*(i-1);j2 <= n;j2 += i11 ){
                a[j2]=true;}
          }
         if(! a [ i+1 ]){
            i22=(i+1)*6;
            if(i*i<n)
            for(j=(i+1)*(i+1);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;
}