Cod sursa(job #3293821)

Utilizator oana_vlasaOana Vlasa oana_vlasa Data 12 aprilie 2025 17:42:43
Problema Ciurul lui Eratosthenes Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.24 kb
//Dandu-se un numar natural N, sa se determine numarul numerelor prime mai mici sau egale cu N.
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <stdbool.h>
int ciur(int n)
{ int numar=0;

    bool *isPrime=malloc((n+1)*sizeof(bool));
    if(isPrime==NULL)
    {
        perror("eroare la alocarea memoriei");
        exit(-1);
    }
    for (int i = 0; i <= n; i++)
        isPrime[i] = true;

    int candidat_prim=3;
    for(;candidat_prim*candidat_prim<=n;candidat_prim+=2)
    {
        if(isPrime[candidat_prim])
        {

            for (int j=candidat_prim*candidat_prim;j<=n;j+=candidat_prim)
                isPrime[j]=false;
        }
    }
    candidat_prim=3;
    numar=1;
    for(;candidat_prim<=n;candidat_prim+=2)
    {if(isPrime[candidat_prim])
        {
            numar++;

        }}
        free(isPrime);
    return numar;

}
int main(void)
{ int n,numar;
    FILE *fin=fopen("ciur.in","rt");
    if(fin==NULL)
    {
        perror("eroare la deschiderea fisierului");
        exit(-1);
    }
      FILE *fout=fopen("ciur.out","wt");
    if(fout==NULL)
    {
        perror("eroare la deschiderea fisierului");
        exit(-1);
    }
    fscanf(fin,"%d",&n);
     numar=ciur(n);
    fprintf(fout,"%d",numar);
    return 0;
}