Cod sursa(job #761941)

Utilizator ioana26Ioana Andronescu ioana26 Data 27 iunie 2012 21:48:25
Problema Ciurul lui Eratosthenes Scor 60
Compilator c Status done
Runda Arhiva educationala Marime 0.81 kb
/*
Algoritmul de aflare a numerelor prime mai mici decat un numar dat folosind ciurul lui Eratostene.
*/

#include <stdio.h>

#define MAXNUM  2000000

int prim[MAXNUM];

int ciur_eratostene (int numar) {
    int prime = 1;
    int i, j;
    
    for (i = 1; (i << 1) + 1 <= numar; i++) 
        prim[i] = 1;

    for (i = 1; (i << 1) + 1 <= numar; i++) {
        if (prim[i]) {
            prime++;
            j = i + i + i + 1;
            while ((j << 1) + 1 <= numar) {
                prim[j] = 0;
                j += (i << 1) + 1;
            }
        }
    }
    return prime;
}

int main () {
	int numar;

    FILE *f_in = fopen("ciur.in", "r");
    FILE *f_out = fopen("ciur.out", "w");

    fscanf(f_in, "%d", &numar);
    int prime = ciur_eratostene(numar);
    fprintf(f_out, "%d\n", prime);
    
    return 0;
}