Numero perfetto - Leetcode 507
Link problema originale:https://leetcode.com/problems/perfect-number/
In questo problema, ci viene chiesto di determinare se un dato numero intero n è un numero perfetto, definito come un numero intero uguale alla somma di tutti i suoi divisori positivi (escluso n stesso).
Il modo più intuitivo per farlo è eseguire il ciclo da 2 fino a n/2 e tenere traccia della somma parziale. Tuttavia, non a caso, ciò fornisce un'eccezione per il superamento del limite di tempo per i grandi numeri.
Quindi ho pensato a una soluzione più veloce perché matematicamente, quando troviamo un fattore, c'è sempre un altro fattore che gli corrisponde che dovrebbe essere anch'esso parte della somma (es. se n = 28 e partiamo da 2, allora 28 / 2 = 14 dovrebbe anche essere un fattore e possiamo dimezzare il numero dei loop in questo modo poiché possiamo colmare il divario più velocemente). Questa è la soluzione accettata che mi è venuta in mente:
class Solution {
public boolean checkPerfectNumber(int num) {
if (num == 1) {
return false;
}
int sum = 1;
int left = 2;
int right = num / 2;
while (left < right) {
if (num % left == 0) {
sum += left;
sum += (num / left);
right = num / left;
}
left++;
}
return sum == num;
}
}

![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































