# PBinfo #3317 – Eratostene6 – Rezolvare C++

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

## Enunț

Cerința
Se dă un şir format din n numere naturale, a1, a2, …, an. O pereche ( ai, aj), unde i<j, se numeşte eratostenică dacă  i divide pe j şi ai divide pe aj. Determinaţi câte perechi eratostenice conţine şirul dat.

Date de intrare
Fișierul de intrare eratostene6.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 eratostene6.out va conține pe prima linie numărul perechilor eratostenice din şirul dat.

Restricții și precizări

2 ≤ n ≤ 100.000
0 ≤ a1, a2, …, an ≤ 1.000

Exemplu:
eratostene6.in

4
2 3 0 6
eratostene6.out

3
Explicație
Cele 3 perechi eratostenice sunt: (2,0), (2,6), (3,6).

## Cod sursă C++

```cpp
#include <fstream>
#define N 100000
using namespace std;
ifstream fi("eratostene6.in");
ofstream fo("eratostene6.out");
int i, n, j, k, m;
int a[N+1];
int main()
{
    fi >> n;
    for(i = 1; i <= n; i++)
        fi >> a[i];
    m = n / 2;
    k = 0;
    for(i = 1; i <= m; i++)
    {
        j = i + i;
        while(j <= n)
        {
            if(a[i] != 0)
            {
                if(a[j] % a[i] == 0) k++;
            }
            else
                if(a[j]==0) k++;
            j = j + i;
        }
    }
    fo << k;
    return 0;
}
```

## Resurse

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