Błędy widzę trzy. Po pierwsze ten drugi warunek w pętli `while` powinien wykonać się tylko jeśli wykona się pierwszy. Po drugie powinno tam być `&&`, a nie `||`. Po trzecie w pierwszym ifie nie chcemy wykluczać kwadratów liczb całkowitych, więc nie jest potrzebne `&& n!=d*d`. Kod będzie wyglądać tak
while(d * d <= n)
{
if(n%d==0) {
suma = suma + d;
if(d!=1 && n!=d*d)
suma = suma + n/d;
}
d++;
}
I takie coś działa - wypisuje 6, 28, 496 i 8128. Z tym, że można ten kod jeszcze trochę uprościć, wyrzucając drugiego ifa z pętli.
#include <iostream>
using namespace std;
int main()
{
int n = 2;
int licznik = 0;
int d, suma;
while(licznik < 4)
{
d = 1;
suma = 0;
while(d * d < n)
{
if(n % d == 0) {
suma = suma + d;
suma = suma + n/d;
}
d++;
}
if(d * d == n) suma += d;
if(suma == 2 * n)
{
cout << n<<endl;
licznik++;
}
n++;
}
return 0;
}