Nombre parfait — Leetcode 507
Lien du problème d'origine :https://leetcode.com/problems/perfect-number/
Dans ce problème, on nous demande de déterminer si un entier donné n est un nombre parfait, défini comme un entier égal à la somme de tous ses diviseurs positifs (à l'exclusion de n lui-même).
La façon la plus intuitive de le faire est de boucler de 2 jusqu'à n / 2 et de suivre la somme courante. Cependant, sans surprise, cela donne une exception de dépassement de délai pour les grands nombres.
J'ai donc trouvé une solution plus rapide car mathématiquement, quand on trouve un facteur, il y a toujours un autre facteur qui lui correspond et qui devrait aussi faire partie de la somme (par exemple si n = 28 et on part de 2, alors 28 / 2 = 14 devrait également être un facteur et nous pouvons réduire le nombre de boucles de moitié de cette façon car nous pouvons combler l'écart plus rapidement). C'est la solution acceptée que j'ai trouvée:
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;
}
}
![Qu'est-ce qu'une liste liée, de toute façon? [Partie 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































