Informações

Prazo de entrega Sem prazo
Limite de submissão No limitation

Etiquetas

Entrar

[6.6] Nombres sublimes [Obligatoire]

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 sont 1, 2, 3 et 6 et que 2 x 6 = 12 = 1 + 2 + 3 + 6
  • 28 est également un nombre parfait puisque ses diviseurs sont 1, 2, 4, 7, 14, 28 et que 2 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

Évaluation

Votre code va être compilé puis testé avec plusieurs valeurs d'entrées différentes pour vérifier qu'il fonctionne bien.

Cependant, prenez déjà l'habitude de tester votre code vous-mêmes car il n'y aura pas INGInious pour le vérifier automatiquement dans l'exercice récapitulatif.

Veuillez aussi suivre les bonnes pratiques suivantes car INGInious ne sait pas les vérifier automatiquement mais elles seront vérifiées dans l'exercice récapitulatif :

  • Les noms des variables, constantes, paramètres et fonctions créés sont-ils pertinents ? Correspondent-ils vraiment à ce qu'ils doivent contenir ?
  • Est-ce que le code est correctement factorisé ? Est-ce qu'il est possible de déplacer du code en dehors des sélections ou de créer des fonctions pour avoir moins de code dupliqué ?
  • Est-ce que les sélections et conditions sont correctement organisées ? Est-ce qu'il est possible de changer l'ordre des sélections ou des conditions pour diminuer leur nombre ?
  • Est-ce que toutes les fonctions sont bien spécifiées avec des préconditions et postconditions claires ?

Le code