Cod sursa(job #711888)

Utilizator sana1987Laurentiu Dascalu sana1987 Data 12 martie 2012 20:52:16
Problema Ciurul lui Eratosthenes Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.65 kb
#include <stdio.h>
#include <string.h>

#define N (2000000 + 1)

char p[N];

int getPrimeNumbers(int n) {
    int nr = 1, i, j;

    for (i = 1; ((i * i) << 1) + (i << 1) <= n; i ++) {
        if (p[i] == 0) {
            for (j = ((i * i) << 1) + (i << 1); (j << 1) + 1 <= n; j+= (i << 1) + 1) {
                p[j] = 1;
            }
        }
    }

    for (i = 1; (i << 1) + 1 <= n; i++)
        if (p[i] == 0) nr++;

    return nr;
}

int main(int argc, char **argv) {
    freopen("ciur.in", "r", stdin);
    freopen("ciur.out", "w", stdout);
    
    memset(p, 0, sizeof(p));
    int n;
    scanf("%d", &n);

    printf("%d", getPrimeNumbers(n));

	return 0;
}