Informatică, întrebare adresată de booth130921, 8 ani în urmă

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
imi da 80 de puncte si nu stiu de ce!
int sumdiv(int n)
{int s=0;
for(int d=1;d*d<=n;d++)
if(n%d==0){
s+=d;
if(d*d 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< if(k==0)
cout<<"nu exista";
}


boiustef: nu am inteles aici? if(d*d s+=n/d;} de la functia sumdiv
boiustef: mai bine faceai astfel:
int sumdiv(int n)
{int s=0;
for(int d=1;d*d if(n%d==0){ s+=d; s+=n/d; }
if(d*d ==n) s+=d;
return s;}
boiustef: int sumdiv(int n)
{int s=0;
for(int d=1;d*d < n; ++d)
if(n%d==0){ s+=d; s+=n/d; }
if(d*d ==n) s+=d;
return s;}
boiustef: dar mai reusit e asa:
int sumdiv(int n)
{int s=1;
for(int d=2;d*d < n; ++d)
if(n%d==0){ s+=d; s+=n/d; }
if(d*d ==n) s+=d;
return s;}

Răspunsuri la întrebare

Răspuns de boiustef
5

void perfect(int a, int b)

{

   int np=0, num, j;

   if (a%2==1) ++a;

   if (b%2==1)  --b;

   for (num=b; num>=a; num-=2) {

       int suma=0;

       for (j=1; j<=num/2; ++j)

           if (num%j==0) suma+=j;

       if (suma==num) { ++np; cout << num << " " ;}

}

if (np==0) cout << "nu exista" << "\n";

return;

}

Alte întrebări interesante