Pagini recente » Cod sursa (job #1805469) | Cod sursa (job #538937) | Cod sursa (job #1243550) | Cod sursa (job #481325) | Cod sursa (job #1301694)
#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 bitSet[2000000];
void markBitSet(int bitSet[], int dimension);
void clearCompositeIndexes(int bitSet[], int dimension);
int getNumberOfPrimes(int bitSet[], int size);
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);
markBitSet(bitSet, size);
clearCompositeIndexes(bitSet, size);
outputFile = fopen(OUT_FILE_NAME, "w");
if (outputFile == NULL) {
printf("Could not open file for write: %s", strerror(errno));
return 1;
}
int numberOfPrimes = getNumberOfPrimes(bitSet, size);
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;
}
}
void clearCompositeIndexes(int bitSet[], int dimension) {
bitSet[0] = FALSE;
bitSet[1] = FALSE;
int i, j;
for (i = 2; i * i <= dimension; i++) {
if (bitSet[i]) {
for (j = 2 * i; j <= dimension; j += i) {
bitSet[j] = FALSE;
}
}
}
}
int getNumberOfPrimes(int bitSet[], int size) {
int numberOfPrimes = 0;
int i;
for (i = 0; i <= size; i++) {
if (bitSet[i]) {
numberOfPrimes++;
}
}
return numberOfPrimes;
}