Les mathématiciens ont défini de nombreuses propriétés pour les nombres entiers.
Vous connaissez notamment les nombres pairs (divisibles par 2
), impairs (non divisibles par 2
).
Il existe également les nombres premiers (qui ne sont divisibles que par 1
et eux-mêmes).
Il existe d'autres types de nombres entiers moins connus.
Ainsi, un nombre entier positif est dit parfait si la somme de ses diviseurs entiers (y compris 1 et lui-même) est égale au double de ce nombre.
6
est un nombre parfait puisque 2 x 6 = 12 = 1 + 2 + 3 + 6
. Par contre, 8
n'est pas un nombre parfait.
Ses diviseurs sont 1
, 2
, 4
et 8
et leur somme vaut 15
et non 16
.
Un nombre entier positif est sublime lorsque le nombre de ses diviseurs et la somme de ses diviseurs sont tous les deux des nombres parfaits.
Le plus petit nombre sublime connu est 12
. Il possède 6
diviseurs : 1
, 2
, 3
, 4
, 6
et 12
et leur somme vaut 1 + 2 + 3 + 4 + 6 + 12 = 28
.
6
est un nombre parfait puisque ses diviseurs sont1
,2
,3
et6
et que2 x 6 = 12 = 1 + 2 + 3 + 6
28
est également un nombre parfait puisque ses diviseurs sont1
,2
,4
,7
,14
,28
et que2 x 28 = 56 = 1 + 2 + 4 + 7 + 14 + 28
Le nombre 12
est donc bien un nombre sublime.
Il vous est demandé de remplacer les TODO du programme ci-dessous pour écrire une fonction qui permet de déterminer si un nombre est sublime.
Cette fonction s'appellera "magnificent
" et sa spécification et sa signature est ci-dessous.
Procédez par raffinements successifs:
Identifiez d'abord les fonctions dont vous aurez besoin, spécifiez-les correctement (précondition, postcondition, signature) avant de vous lancer dans le code.
En plus de la fonction "magnificent
", vous devez spécifier et définir au moins deux fonctions !
Ensuite, écrivez une fonction main
qui demande à l'utilisateur d'entrer un nombre et qui affiche les textes suivants en fonction de s'il est sublime ou pas:
- Si le nombre est sublime, affichez "
xxx est un nombre sublime
" où "xxx
" est le nombre entré par l'utilisateur - Si le nombre n'est pas sublime, affichez "
xxx n'est pas un nombre sublime
" où "xxx
" est le nombre entré par l'utilisateur
Exemple
Par exemple, si l'utilisateur indique 12
, le programme devrait afficher:
12 12 est un nombre sublime
Autoévaluation
Une fois votre programme écrit, vérifiez et corrigez les points suivants:
- Chaque instruction se termine-t-elle bien par un point virgule ?
- La séquence d'instruction après l'accolade ouvrante est-elle alignée mais légèrement décalée vers la droite par rapport à "
main
" ? - Chaque variable est-elle déclarée ? C'est-à-dire, avez vous déterminé le type de chacune de vos variables ?
- Avez-vous utilisé la fonction de lecture qui correspond au type de la variable dont vous voulez obtenir la valeur ? Par exemple, si vous voulez obtenir un int, avez-vous bien utilisé "
scanf("%d", &votre_variable)
" ? - Avez-vous bien créé les fonctions demandées ?
Une fois votre programme corrigé, exécutez-le ! Si tout semble correct, postez votre réponse sur Webcampus !