# PBinfo #800 – Perfect – Rezolvare C++

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

## Enunț

Un număr natural nenul se numește perfect dacă este egal cu suma divizorilor săi naturali strict mai mici decât el.
Exemplu: 28 este număr perfect pentru că 28=1+2+4+7+14.

Cerinţa
Să se scrie o funcție C++ care, pentru doi parametri, a și b, afișează pe ecran, separate prin câte un spațiu, în ordine descrescătoare, toate numerele perfecte din intervalul [a,b]. Dacă în interval nu există astfel de numere, subprogramul afișează pe ecran mesajul nu exista.

Restricţii şi precizări

numele funcției va fi perfect și va avea exact doi parametri, a și b, cu semnificația de mai sus
1 ≤ a ≤ b ≤10000

Exemplu
Pentru a=5 și b=30, se afișează pe ecran: 28 6.

Important
Soluţia propusă va conţine doar definiţia funcţiei cerute. 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
int sumdiv(int n) {
    int S = 0;
    for (int d = 1; d * d <= n; d++)
        if (n % d == 0) {
        	S = S + d;
            if (d * d < n)
                S = S + n / d;
    } return S;
}
void perfect(int x, int y) {
    bool adv = false;
    for (int i = y; i >= x; i--)
        if (sumdiv(i) == 2 * i)
        	cout << i << " ", adv = true;
    if (adv == false) cout << "nu exista";
}
```

## Resurse

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