# PBinfo #4235 – PerechiDivP – Rezolvare C++

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

## Enunț

Cerinţa
Scrieţi definiția completă a subprogramului C++ cu antetul:

long long PerechiDivP(int a[], int n, int P)
Subprogramul returnează numărul de perechi (a[i], a[j]) cu i < j și suma a[i]+a[j] este multiplu de P.

Restricţii şi precizări

1 ≤ a[i] ≤ 30.000
2 ≤ n ≤ 200.000
2 ≤ P ≤ 1.000
elementele vectorului a sunt indexate de la 0
Puteți utiliza în rezolvare orice structură de date și orice funcție predefinită.

Exemplu
Dacă a = (9,2,4,7,3) și P = 3, atunci se va returna valoarea 3, perechile fiind (9,3), (2,4) și (2,7).

Important
Soluţia propusă va conţine doar definiţia subprogramului cerut. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.

## Cod sursă C++

```cpp
long long PerechiDivP(int a[], int n, int P)
{
    int rest[1000] = {0};
    int r, cr;
    long long cnt = 0;
    for (int i = 0; i < n; i++)
    {
        r = a[i] % P;
        cr = ((r == 0)? (0) : (P - r));
        cnt += rest[cr];
        rest[r]++;
    }
    return cnt;
}
```

## Resurse

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