Aller au contenu principal

Module 06 · Leçon 3

Nombres parfaits et nombres amis

180 minanalyse · pascal
Affichage du code

Ce que vous saurez faire

  • Calculer la somme des diviseurs propres d'un entier
  • Tester si un nombre est parfait
  • Tester si deux nombres sont amis

Avant de commencer

6 = 1 + 2 + 3 : 6 est le plus petit nombre parfait. Les diviseurs propres de 220 sont 1+2+4+5+10+11+20+22+44+55+110 = 284, et réciproquement pour 284220. Ces deux nombres sont amis.


1. Somme des diviseurs propres

FUNCTION SommeDiv(n : integer) : integer;
VAR i, s : integer;
BEGIN
  s := 0;
  FOR i := 1 TO n DIV 2 DO     { aucun diviseur propre > n/2 }
    IF n MOD i = 0 THEN
      s := s + i;
  SommeDiv := s;
END;

SommeDiv(6) = 1 + 2 + 3 = 6. SommeDiv(12) = 1+2+3+4+6 = 16.


2. Nombre parfait

FUNCTION EstParfait(n : integer) : boolean;
BEGIN
  EstParfait := (n = SommeDiv(n)) AND (n > 0);
END;

Premiers parfaits : 6, 28, 496, 8128. Ils sont rares !


3. Nombres amis

FUNCTION SontAmis(a, b : integer) : boolean;
BEGIN
  SontAmis := (a <> b) AND (SommeDiv(a) = b) AND (SommeDiv(b) = a);
END;

Couple célèbre : (220, 284). Le suivant : (1184, 1210).


4. Exercices

Exercice 1facile
Diviseurs de 28

Lister tous les diviseurs propres de 28. Vérifier que 28 est parfait.

Voir le corrigé

Diviseurs propres de 28 : 1, 2, 4, 7, 14. Somme : 1+2+4+7+14 = 28. Oui, 28 est parfait.

Exercice 2moyen
Liste des parfaits ≤ N (type bac courant)

Écrire un programme qui demande N et affiche tous les nombres parfaits inférieurs ou égaux à N.

Voir le corrigé
PROGRAM Parfaits;
VAR n, k : integer;
BEGIN
  Write('N : ');
  Readln(n);
  FOR k := 1 TO n DO
    IF EstParfait(k) THEN
      Writeln(k, ' est parfait');
END.

Pour N = 1000, le programme affiche 6, 28, 496.

Exercice 3difficile
Tous les couples amis ≤ N (hors bac, bonus)

Trouver tous les couples (a, b) avec a < b ≤ N tels que a et b sont amis. Pour N = 1500.

Voir le corrigé
PROGRAM Amis;
CONST N = 1500;
VAR a, b : integer;
BEGIN
  FOR a := 2 TO N DO
  BEGIN
    b := SommeDiv(a);
    IF (b > a) AND (b <= N) AND (SommeDiv(b) = a) THEN
      Writeln('(', a, ', ', b, ')');
  END;
END.

Affichage : (220, 284), (1184, 1210).

L'astuce b > a évite d'afficher chaque couple deux fois.


5. Erreurs fréquentes au bac

  • Inclure n dans la somme : FOR i := 1 TO n au lieu de n DIV 2.
  • Tester n=0 ou négatif sans le bloquer.
  • Pour les amis : oublier que a ≠ b (sinon tous les parfaits seraient amis avec eux-mêmes).

6. Quiz

Quiz (5 questions)

1

Les diviseurs propres de 12 sont :

2

Le premier nombre parfait est :

3

Pour optimiser SommeDiv, on peut boucler jusqu'à :

4

Deux nombres amis vérifient :

5

Tous les nombres parfaits connus sont :

Bravo d'être arrivé jusqu'ici. Marquez la leçon terminée pour ancrer le progrès.