Inanzitutto salve a tutti, sono uno studente del primo anno di informatica presso la Sapienza a Roma.
Vi scrivo perchè sono in leggera difficoltà con l'esercizio

Un intero positivo si dice perfetto se è uguale alla somma dei suoi divisori (sia primi che non primi) escluso se stesso. Per esempio 28 è perfetto perché 28 = 1+2+4+7+14. Scrivere una funzione int perfectNumbers(int n) che dato in input un intero positivo n restituisca il numero di numeri perfetti tra 1 e ed n.
In particolare:

Io ho scritto il codice:

codice:
#include<stdio.h>

int perfectNumbers (int x){

    int pN=0;
	int sommadivisori;
    int divisore=x-1;

	while(x != 0){
	 while (divisore != 0){
	    if(x%divisore == 0) 		   sommadivisori+=divisore;
	    divisore-=1;
	}
	 if (sommadivisori == x) pN+=1;
	 x-=1;
}
	return pN;
}

Quello che succede però è che mi restituisce come valore sempre e solo pN = 1 o pN=0. Probabilmente l'errore è idiota perchè sono proprio agli inizi, ma vorrei capire dove ho sbagliato

Grazie mille!