Informatică, întrebare adresată de morcov64, 9 ani în urmă

AJUTOR!!!!!!!!
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.

Răspunsuri la întrebare

Răspuns de stassahul
12
int sumdiv(int n)
{
    int s=0;
    for(int d=1;d*d<=n;d++)
        if(n%d==0)
        {
            s+=d;
            if(d*d<n)
                s+=n/d;
        }
    return s;
}

void perfect(int a, int b)
{
    int k=0;
    for(int i=b;i>=a;i--)
        if(sumdiv(i)-i==i)
            cout << i << " ", k++;
    if(k==0) cout << "nu exista";
}
Alte întrebări interesante