Cod sursa(job #2660123)

Utilizator catalin69420Gogu Popescu catalin69420 Data 18 octombrie 2020 12:01:42
Problema Ciurul lui Eratosthenes Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


typedef unsigned long ulong;

ulong sieve(ulong n) {
    char* notPrime = calloc(n+1, sizeof(char));
    if (!notPrime) {
        exit(EXIT_FAILURE);
    }

    for (ulong i = 2; i * i <= n; i++)
        if (!notPrime[i])
            for (ulong j = i * i; j <= n; j += i)
                notPrime[j] = 1;

    int count = 0;
    for (ulong i = 2; i <= n; i++)
        count += !notPrime[i];

    return count;
}

int main() {
    FILE* in = fopen("ciur.in", "r");
    if (!in) {
        return 0;
    }

    FILE* out = fopen("ciur.out", "w");
    if (!out) {
        fclose(in);
        return 0;
    }

    ulong n;
    int r = fscanf(in, "%lu", &n);
    if (r != 1) {
        fclose(in);
        fclose(out);
        return 0;
    }

    fprintf(out, "%lu", sieve(n));

    fclose(in);
    fclose(out);

    return 0;
}