# PBinfo #2663 – Divisors – Rezolvare C++

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

## Enunț

Cerința
Trebuie să definiți trei funcții având următoarele antete:

int NrDiv(int n)
int NextNrDiv(int n)
int PrevNrDiv(int n)
Funcția NrDiv primește ca parametru un număr natural n și returnează numărul divizorilor lui n
Funcția NextNrDiv primește ca parametru un număr natural n și returnează cel mai mic număr natural, strict mai mare decât n, care are același număr de divizori ca și n.
Funcția PrevNrDiv primește ca parametru un număr natural n și returnează cel mai mare număr natural, strict mai mic decât n, care are același număr de divizori ca și n. Dacă acest număr nu există, funcția va returna valoarea -1.

Restricții și precizări

10 ≤ n ≤ 50.000
Puteți să apelați o funcție din altă funcție. Se recomandă ca funcțiile să fie definite în ordinea descrisă mai sus în enunț.

Exemplu:
NrDiv(100) = 9, NextNrDiv(100) = 196, PrevNrDiv(100) = 36

Important
Rezolvarea voastră trebuie să conţină definiţiile celor trei funcţii. Prezenţa în soluţie a altor instrucţiuni sau lipsa definiției vreunei funcții poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.

## Cod sursă C++

```cpp
int NrDiv(int n) {
    int i, nrD = 0;
    for (i = 1; i * i < n; i++)
        if (n % i == 0) nrD = nrD + 2;
        if (i * i == n) nrD++;
        return nrD;
}
int NextNrDiv(int n) {
    int i, nrD;
    nrD = NrDiv(n);
    while (1) {
        n++;
        i = NrDiv(n);
        if (i == nrD) return n;
    } return -1;
}
int PrevNrDiv(int n) {
    int i, nrD;
    nrD = NrDiv(n);
    while (n > 1) {
        n--;
        i = NrDiv(n);
        if (i == nrD) return n;
    } return -1;
}
```

## Resurse

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