Pagini recente » Cod sursa (job #1971037) | Cod sursa (job #2154646) | Cod sursa (job #3154099) | Cod sursa (job #1691387) | Cod sursa (job #1301619)
#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;
void markBitSet(int bitSet[], int dimension);
int calculateNumberOfPrimes(int bitSet[], int dimension);
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];
markBitSet(bitSet, size);
int numberOfPrimes = calculateNumberOfPrimes(bitSet, size);
outputFile = fopen(OUT_FILE_NAME, "w");
if (outputFile == NULL) {
printf("Could not open file for write: %s", strerror(errno));
return 1;
}
fprintf(outputFile, "%d", numberOfPrimes);
fclose(inputFile);
fclose(outputFile);
return 0;
}
void markBitSet(int bitSet[], int dimension) {
int i;
for (i = 0; i <= dimension; ++i) {
bitSet[i] = TRUE;
}
}
int calculateNumberOfPrimes(int bitSet[], int dimension) {
int numberOfPrimes = 0;
bitSet[0] = FALSE;
bitSet[1] = FALSE;
int i, j;
for (i = 2; i <= dimension; i++) {
if (bitSet[i]) {
numberOfPrimes++;
for (j = i * i; j <= dimension; j += i) {
bitSet[j] = FALSE;
}
}
}
return numberOfPrimes;
}