Publié le vendredi 10 juillet 2020
Modifié le samedi 09 avril 2022 à 15h57 3 min
Modifié le samedi 09 avril 2022 à 15h57 3 min
Déterminer si un nombre est parfait
Définition : un nombre parfait est un nombre égal à la somme de ses diviseurs (hormis lui-même).
Remarque : on peut aussi dire qu'un nombre est parfait si la somme de tous ses diviseurs est égale au double de ce nombre.
Pour vérifier si un nombre est parfait, on détermine d'abord les diviseurs de ce nombre, et on en fait la somme sans prendre le nombre lui-même. Si cette somme correspond au nombre initial alors il s'agit d'un nombre parfait.Remarque : à ce jour, il n'existe pas de nombre parfait impair connu, et aucune démonstration n'existe à ce sujet.
Exemples :
Vérifier que \(28\) est parfait :
On cherche les diviseurs de \(28\) :
\(28 = 1 \times 28\)
\(28 = 2 \times 14\)
\(28 = 4 \times 7\)
Les diviseurs de \(28\) sont \(1;2;4;7;14\) et \(28\).
On en fait la somme sans prendre \(28\) :
\(1+2+4+7+14 = 28\)
Donc \(28\) est bien un nombre parfait.
On cherche les diviseurs de \(28\) :
\(28 = 1 \times 28\)
\(28 = 2 \times 14\)
\(28 = 4 \times 7\)
Les diviseurs de \(28\) sont \(1;2;4;7;14\) et \(28\).
On en fait la somme sans prendre \(28\) :
\(1+2+4+7+14 = 28\)
Donc \(28\) est bien un nombre parfait.
Déterminer si \(32\) est parfait :
On détermine les diviseurs de \(32\) :
\(32=1 \times 32\)
\(32=2 \times 16\)
\(32=4 \times 8\)
Les diviseurs de \(32\) sont \(1;2;4;8;16\) et \(32\).
\(1+2+4+8+16 = 31\)
Donc \(32\) n'est pas parfait.
On détermine les diviseurs de \(32\) :
\(32=1 \times 32\)
\(32=2 \times 16\)
\(32=4 \times 8\)
Les diviseurs de \(32\) sont \(1;2;4;8;16\) et \(32\).
\(1+2+4+8+16 = 31\)
Donc \(32\) n'est pas parfait.
Cette fonction Python permet de déterminer si un nombre entier est parfait :
PYTHON
def est_parfait(n):
somme_diviseurs = 1 #on commence à 1 car on ne le testera pas mais il est toujours diviseur
for i in range(2, round(n**0.5)+1): #on teste tous les entiers de 2 jusqu'à racine de n comprise
#comme les diviseurs vont par pair, cela permet de simplifier les calculs
if n%i == 0: #si i est un diviseur de n
somme_diviseurs += i #on ajoute i à la somme
somme_diviseurs += n/i #on ajoute n/i, qui est aussi un diviseur de n
if n == somme_diviseurs :
return True
else :
return False
somme_diviseurs = 1 #on commence à 1 car on ne le testera pas mais il est toujours diviseur
for i in range(2, round(n**0.5)+1): #on teste tous les entiers de 2 jusqu'à racine de n comprise
#comme les diviseurs vont par pair, cela permet de simplifier les calculs
if n%i == 0: #si i est un diviseur de n
somme_diviseurs += i #on ajoute i à la somme
somme_diviseurs += n/i #on ajoute n/i, qui est aussi un diviseur de n
if n == somme_diviseurs :
return True
else :
return False
retour vers la liste d'articles