# PBinfo #3312 – Eratostene1 – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: deivid

## Enunț

Cerința
Se dau n numere naturale. Aflaţi câte dintre aceste numere sunt prime.

Date de intrare
Fișierul de intrare eratostene1.in conține pe prima linie numărul n, iar pe a doua linie n numere naturale separate prin spații.

Date de ieșire
Fișierul de ieșire eratostene1.out va conține pe prima linie numărul numerelor prime aflate în fişierul de intrare.

Restricții și precizări

1 ≤ n ≤ 500.000
numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000.000

Exemplu:
eratostene1.in

7
12 29 33 47 51 7 19
eratostene1.out

4
Explicație
În fișierul de intrare sunt 4 numere prime: 29, 47, 7, 19.

## Cod sursă C++

```cpp
#include <fstream>
#include <bitset>
using namespace std;
ifstream f("eratostene1.in");
ofstream g("eratostene1.out");
int i,j,x,n,k;
bitset<500001> p;
int main()
{
    p[0] = 1;
    for(i = 3; i <= 999999; i=i+2)
        if(p[i/2]==0)
    {
        j = i+i+i;
        while(j <= 999999)
        {
            p[j/2] = 1;
            j = j + i + i;
        }
    }
    f >> n;
    k=0;
    for(i = 1; i <= n; i++)
    {
        f >> x;
        if(x % 2 == 0)
        {
            if(x == 2)k++;
        }
        else
        {
            if(p[x/2] == 0)k++;
        }
    }
    g << k;
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/3312)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/3312/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-3312/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
