Cod sursa(job #1832938)

Utilizator mariab98Maria Monica mariab98 Data 21 decembrie 2016 11:44:20
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 kb
#include <fstream>
#include <iostream>

using namespace std;

int prim[316260];

int setbit( int j );
int getbit( int j );

int main()
{
   // ifstream fin("difprim.in");
   // ofstream fout("difprim.out");
    ifstream fin("ciur.in");
    ofstream fout("ciur.out");

    long a,b;
   // cin >> a >> b;
   fin>>a;
    int i,j;

    //cout<<(a<<6)<<" ";

    for ( i=2; i<=b; i++ )
        for ( j=i*i; j<=b; j=j+i ) {
            setbit(j);
        }
    int n=0;
    for ( i=2; i<=b; i++ ){
      //  if ( i%32==0 )
         //   cout<<endl<<endl<<i<<" "<<prim[i]<<endl<<endl;
        //cout<<i<<" "<<getbit(i)%2<<endl;
        if( getbit(i)%2==0 )
            n++;
    }
    fout<<n;
    //cout<<endl<<endl;



/*

    long difmax=0;
    int ma=0, mb;
    int ca, cb;

    if ( b%2==0 )
        i=b-1;
    else i=b;


    while ( i>=a ) {
        cout << i << " " << (prim[i/32]>>(i%32)%2) <<endl;
        if( (prim[i/32]>>(i%32))%2==0 ) {
            mb=ma;
            ma=i;
            if ( mb-ma >= difmax ) {
                difmax=mb-ma;
                cb=mb;
                ca=ma;
            }
        }
        i=i-2;
    }

    cout << ca << " " << cb;
*/
    fin.close();
    fout.close();

    return 0;
}

int setbit( int j )
{
    int index=1;
    int x=j/32;

    index=(index<<(j%32));
    prim[x]|=index;
}

int getbit( int j )
{
    int x=prim[j/32];
    return x>>(j%32);
}