Cod sursa(job #3309712)

Utilizator valeriuionutiocsaValeriu Ionut Iocsa valeriuionutiocsa Data 8 septembrie 2025 01:35:09
Problema Ciurul lui Eratosthenes Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.12 kb
// https://www.infoarena.ro/problema/ciur

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define INPUT_FILE "ciur.in"
#define OUTPUT_FILE "ciur.out"

int main()
{
    FILE *in = NULL;
    if ((in = fopen(INPUT_FILE, "r")) == NULL)
    {
        fprintf(stderr, "failed to open input file %s\n", INPUT_FILE);
        exit(-1);
    }

    unsigned n = 0;
    fscanf(in, "%u", &n);
    fclose(in);

    bool *isComposite = (bool *)calloc(n + 1, sizeof(bool));
    for (unsigned i = 2; i * i <= n; i++)
    {
        if (!isComposite[i])
        {
            for (unsigned j = i * i; j <= n; j += i)
            {
                isComposite[j] = true;
            }
        }
    }

    unsigned primeCount = 0;
    for (unsigned i = 2; i <= n; i++)
    {
        if (!isComposite[i])
        {
            primeCount++;
        }
    }

    FILE *out = NULL;
    if ((out = fopen(OUTPUT_FILE, "w")) == NULL)
    {
        fprintf(stderr, "failed to open output file %s\n", OUTPUT_FILE);
        exit(-2);
    }

    fprintf(out, "%u", primeCount);
    fclose(out);

    return 0;
}