for (int i = 1; i < n; i++)
tu możesz zrobić
for (int i = 1; i <= n/2; i++)
Dalej, wiki twierdzi że
"Jak dotąd nie udało się znaleźć liczby doskonałej nieparzystej, ani dowodu, że liczby takie nie istnieją. [...] Wiadomo też, że jeśli liczba taka istnieje, to musi być
większa od 10^1500"
stąd można bezpiecznie założyć, że każda wprowadzona przez usera liczba nieparzysta NIE JEST doskonała. Możesz to sprawdzić na początku.
if (n % 2 != 0) { cout << "NIE"; return 0; }
Możesz wykorzystać również to, że liczby doskonałe rózłożone są dość "rzadko" w liczbach naturalnych. Najmniejsze liczby doskonałe to
6, 496, 8128, 33550336, 8589869056, 137438691328, 2305843008139952128 (https://en.wikipedia.org/wiki/List_of_perfect_numbers), kolejna już nie mieści się w największym standardowo dostępnym typie danych na 64 bitach, tj unsigned long long
.