Mai intai trebuie sa te autentifici.
Cod sursa(job #1301717)
Utilizator | Data | 26 decembrie 2014 12:38:17 | |
---|---|---|---|
Problema | Ciurul lui Eratosthenes | Scor | 30 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.8 kb |
#include <stdio.h>
#include <string.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[2000001];
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 k;
for (k = 2; k <= size; ++k) {
bitSet[k] = TRUE;
}
int numberOfPrimes = 0;
int i, j;
for (i = 2; i <= size; i++) {
if (bitSet[i]) {
numberOfPrimes++;
for (j = 2 * i; j <= size; j += i) {
bitSet[j] = FALSE;
}
}
}
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;
}
}
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;
}