Cod sursa(job #287324)

Utilizator luckBogdan Luca luck Data 24 martie 2009 18:36:13
Problema Ciurul lui Eratosthenes Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.65 kb
#include <stdio.h>
#include <stdlib.h>

int main() {
    unsigned int n, len, i, j, c;
    FILE *f;
    unsigned char *v;
    f = fopen("ciur.in", "r");
    fscanf(f, "%d", &n);
    fclose(f);
    len = (n - 1) / 8 + 1;
    v = (unsigned char*)calloc(len, sizeof(char));
    for(i = 2; i <= n / 2; i++)
        if((v[(i - 1) / 8] & (1 << (i - 1) % 8)) == 0)
            for(j = i * 2; j <= n; j += i)
                v[(j - 1) / 8] |= 1 << (j - 1) % 8;
    c = 0;
    for(i = 1; i < n; i++)
        if((v[i / 8] & (1 << (i % 8))) == 0)
            c++;
    f = fopen("ciur.out", "w");
    fprintf(f, "%d\n", c);
    fclose(f);
    return 0;
}