Cod sursa(job #1042743)

Utilizator Nicusor002Telechi Nicolae Nicusor002 Data 27 noiembrie 2013 17:25:50
Problema Ciurul lui Eratosthenes Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.57 kb
#include<stdio.h>
#include<math.h>
char ciur[((2000000>>4)+2)];

int eratostenes(int n){
    int i,j;
    int prime=n;
    for(i=3;i*i<=n;i+=2){
        if(ciur[i>>4]&(1<<((i>>1)&7)))
            continue;
        for(j=i*i;j<=n;j+=i){
            if(!(ciur[j>>4]&(1<<((j>>1)&7))))
                prime--;
            ciur[j>>4]|=(1<<((j>>1)&7));
        }
    }
    return prime-n/2;
}

int main(){
    int n;
    freopen("ciur.in","r",stdin);
    freopen("ciur.out","w",stdout);

    scanf("%d",&n);

    printf("%d",eratostenes(n));
    return 0;
}