Nombres amis et nombres parfaits

Le problème

Un nombre parfait est un nombre présentant la particularité d'être égal à la somme de tous ses diviseurs excepté lui-même. Le premier nombre parfait est le nombre 6 qui est bien égal à 1+2+3.

Deux nombres a et b sont dits nombres amis si la somme des diviseurs de a est égale à b et la somme des diviseurs de b est égale à a. Par exemple 220 et 284 sont des nombres amis.

Programmation

Nombres parfaits

Ecrire une procédure nombres_parfaits qui retourne la liste des nombres parfaits inférieurs à un entier nmax entré au clavier par l'utilisateur dans le programme principal. Pour ce faire, il peut être utile d'écrire la fonction somme_div qui retourne la somme des diviseurs d'un nombre entier passé en paramètre.

Entrez un entier : 3000
Les nombres parfaits inférieurs à 3000 sont :
6 28 496

Nombres amis

Ecrire une procédure permettant de trouver au moins une autre paire de nombres amis. Le programme commence comme celui des nombres parfaits. Dans le cas oł n n'est pas parfait, il convient de calculer la somme des diviseurs de la somme des diviseurs de n et de tester si cette somme est égale à n. Dans un second temps, vous pourriez réfléchir à la question : comment éviter la double détection des paires de nombres amis ?

Entrez un entier : 3000
284 et 220 sont amis
220 et 284 sont amis
1210 et 1184 sont amis
1184 et 1210 sont amis
2924 et 2620 sont amis
2620 et 2924 sont amis