Cod sursa(job #1454612)

Utilizator alittlezzCazaciuc Valentin alittlezz Data 27 iunie 2015 02:07:08
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.62 kb
#include <fstream>
#include <math.h>

using namespace std;

unsigned ciur[2000005>>6];

#define isComposite(n) (ciur[n>>6]&(1<<((n>>1)&31)))
#define makeComposite(n) (ciur[n>>6] |= (1<<((n>>1)&31)))

int main()
{
    int n,crossn,i,j,k,c;
    ifstream f("ciur.in");
    ofstream g("ciur.out");
    f>>n;
    crossn = sqrt(n);
    c = 1;
    for(i=3;i<=crossn;i=i+2){
        if(!isComposite(i)){
            for(j=i*i,k=i<<1;j<=n;j=j+k){
                makeComposite(j);
            }
        }
    }
    for(i=3;i<=n;i=i+2){
        if(!isComposite(i)){
            c++;
        }
    }
    g<<c;
}