Cod sursa(job #1301581)

Utilizator alex_gabAlex Dragoi alex_gab Data 26 decembrie 2014 09:56:40
Problema Ciurul lui Eratosthenes Scor 30
Compilator c Status done
Runda Arhiva educationala Marime 1.29 kb
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>

static const int TRUE = 1;
static const int FALSE = 0;
const char *IN_FILE_NAME = "ciur.in";
const char *OUT_FILE_NAME = "ciur.out";

FILE *inputFile, *outputFile;

int main(int argc, char *argv[]) {
    inputFile = fopen(IN_FILE_NAME, "r");
    if (inputFile == NULL) {
        printf("Could not open file for read: %s", strerror(errno));
        return 1;
    }

    int size;
    fscanf(inputFile, "%d", &size);

    int bitSet[size + 1];
    int i;
    for (i = 0; i <= size; ++i) {
        bitSet[i] = TRUE;
    }

    bitSet[0] = FALSE;
    bitSet[1] = FALSE;
    int k, j;
    for (k = 2; k * k <= size; k++) {
        if (bitSet[k]) {
            for (j = k * k; j <= size; j += k) {
                bitSet[j] = FALSE;
            }
        }
    }

    outputFile = fopen(OUT_FILE_NAME, "w");
    if (outputFile == NULL) {
        printf("Could not open file for write: %s", strerror(errno));
        return 1;
    }

    int numberOfPrimes = 0;
    int l;
    for (l = 0; l <= size; l++) {
        if (bitSet[l]) {
            numberOfPrimes++;
        }
    }
    fprintf(outputFile, "%d", numberOfPrimes);

    fclose(inputFile);
    fclose(outputFile);
    return 0;
}