Determina se un numero è perfetto, abbondante o difettoso in base allo schema di classificazione dei numeri interi positivi di Nicomaco (60 - 120 d.C.).
Il matematico greco Nicomaco ideò uno schema di classificazione dei numeri interi positivi, che assegna ciascuno di essi in modo univoco a una delle categorie perfetto, abbondante o difettoso, in base alla loro somma dei divisori propri.
La somma dei divisori propri è definita come la somma dei fattori di un numero, escluso il numero stesso.
Per esempio, la somma dei divisori propri di 15 è 1 + 3 + 5 = 9.
Un numero è perfetto quando è uguale alla somma dei suoi divisori propri. Per esempio:
6 è un numero perfetto perché 1 + 2 + 3 = 6
28 è un numero perfetto perché 1 + 2 + 4 + 7 + 14 = 28
Un numero è abbondante quando è minore della somma dei suoi divisori propri. Per esempio:
12 è un numero abbondante perché 1 + 2 + 3 + 4 + 6 = 16
24 è un numero abbondante perché 1 + 2 + 3 + 4 + 6 + 8 + 12 = 36
Un numero è difettoso quando è maggiore della somma dei suoi divisori propri. Per esempio:
8 è un numero difettoso perché 1 + 2 + 4 = 7
Implementa un modo per determinare se un numero dato è perfetto. A seconda del track linguistico che segui, potresti anche dover implementare un modo per determinare se un numero dato è abbondante o difettoso.
Per questo esercizio, diciamo che vogliamo che chi chiama sia responsabile di chiamare classify solo con un input diverso da zero.
Quindi fai in modo che la funzione classify asserisca che il suo input è diverso da zero.
Per maggiori dettagli, vedi la Zig Language Reference e l'implementazione di std.debug.assert.
Tuttavia, nota che questo esercizio al momento non verifica un input pari a 0 (perché std.testing non supporta ancora l'aspettativa di un panic).
Iscriviti a Exercism per imparare e padroneggiare Zig con 104 esercizi e il mentoring di persone reali, tutto gratis.