Suma divizorilor proprii ai unui numar



#include <iostream>

using namespace std;

int main()
{
   int nr, suma=0;
   cin>>nr;
   int d;
   for(d=2;d*d<nr;d++)
      if(nr%d==0)
         suma=suma+d+nr/d; //perechea a caror membrii inmultiti dau nr
   if(d*d==nr) //in caz ca este patrat perfect adunam doar o data
      suma=suma+d;
   cout<<suma;
}

Explicatie:

- citim numarul
- cu ajutorul variabilei d vom parcurge divizorii de la 2 pana la < sqrt(nr) (strict mai mic in caz ca avem patrat perfect)
- in variabila suma vom aduna cate o pereche d si n/d
- in caz ca avem patrat perfect (d*d=n) vom aduna doar o data d, deoarece d si n/d reprezinta acelasi divizor