Ceci est mon premier défi!
Contexte
Le nombre parfait est un entier positif, qui est égal à la somme de tous ses diviseurs, sauf lui-même.
Il en 6
est de même du nombre parfait, depuis 1 + 2 + 3 = 6
.
D'un autre côté 12
, non 1 + 2 + 3 + 4 + 6 = 16 != 12
.
Tâche
Votre tâche est simple, écrivez un programme qui, pour acquis n
, imprimera l'un de ces messages:
Je suis un nombre parfait, parce
d1 + d2 + ... + dm = s == n
que je ne suis pas un nombre parfait, parce qued1 + d2 + ... + dm = s [<>] n
Où
d1, ... dm
sont tous les diviseurs de n
sauf pour n
.
s
est la somme de tous les diviseurs d1, ..., dm
(encore une fois, sans n
).
[<>]
est <
(si s < n
) ou >
(si s > n
).
Exemples
Pour n
être 6
: "Je suis un nombre parfait, car 1 + 2 + 3 = 6 == 6"
Pour n
être 12
: "Je ne suis pas un nombre parfait, car 1 + 2 + 3 + 4 + 6 = 16> 12"
Pour n
être 13
: "Je ne suis pas un nombre parfait, car 1 = 1 <13"
Règles
n
n'est pas plus grand que la norme de votre langueint
.- Vous pouvez lire à
n
partir d'une entrée standard, d'arguments de ligne de commande ou d'un fichier. - Le message de sortie doit être imprimé sur la sortie standard et aucun caractère supplémentaire ne peut apparaître dans la sortie (il peut y avoir un espace de fin ou une nouvelle ligne)
- Vous ne pouvez pas utiliser de fonctions intégrées ou de bibliothèque qui résoudraient la tâche (ou sa partie principale) pour vous. Non
GetDivisors()
ou quelque chose comme ça. - Toutes les autres failles standard s'appliquent.
Gagnant
C'est le code-golf donc le code le plus court en octets gagne!
=
et ==
dans la même équation? Ça n'a aucun sens. Ce devrait être l' d1 + d2 + ... + dm = s = n
OMI.