Προσδιόρισε αν ένας αριθμός είναι τέλειος, υπερτέλειος ή ελλιπής, με βάση το σύστημα ταξινόμησης του Nicomachus (60 - 120 μ.Χ.) για τους θετικούς ακέραιους.
Ο Έλληνας μαθηματικός Nicomachus επινόησε ένα σύστημα ταξινόμησης των θετικών ακεραίων, στο οποίο κάθε αριθμός ανήκει σε μία και μόνο κατηγορία: στους τέλειους, τους υπερτέλειους ή τους ελλιπείς αριθμούς, με βάση το άθροισμα γνησίων διαιρετών του.
Το άθροισμα γνησίων διαιρετών ορίζεται ως το άθροισμα των διαιρετών ενός αριθμού, χωρίς να συμπεριλαμβάνεται ο ίδιος ο αριθμός.
Για παράδειγμα, το άθροισμα γνησίων διαιρετών του 15 είναι 1 + 3 + 5 = 9.
Ένας αριθμός είναι τέλειος όταν ισούται με το άθροισμα γνησίων διαιρετών του. Για παράδειγμα:
6 είναι τέλειος αριθμός, γιατί 1 + 2 + 3 = 6
28 είναι τέλειος αριθμός, γιατί 1 + 2 + 4 + 7 + 14 = 28
Ένας αριθμός είναι υπερτέλειος όταν είναι μικρότερος από το άθροισμα γνησίων διαιρετών του. Για παράδειγμα:
12 είναι υπερτέλειος αριθμός, γιατί 1 + 2 + 3 + 4 + 6 = 16
24 είναι υπερτέλειος αριθμός, γιατί 1 + 2 + 3 + 4 + 6 + 8 + 12 = 36
Ένας αριθμός είναι ελλιπής όταν είναι μεγαλύτερος από το άθροισμα γνησίων διαιρετών του. Για παράδειγμα:
8 είναι ελλιπής αριθμός, γιατί 1 + 2 + 4 = 7
Υλοποίησε έναν τρόπο να προσδιορίζεις αν ένας δεδομένος αριθμός είναι τέλειος. Ανάλογα με τη γλώσσα προγραμματισμού που χρησιμοποιείς, μπορεί επίσης να χρειαστεί να υλοποιήσεις έναν τρόπο να προσδιορίζεις αν ένας δεδομένος αριθμός είναι υπερτέλειος ή ελλιπής.
Σε αυτή την άσκηση, ας πούμε ότι θέλουμε αυτός που καλεί τη συνάρτηση να είναι υπεύθυνος να καλέσει τη classify μόνο με μη μηδενική είσοδο. Οπότε φρόντισε η συνάρτηση classify να κάνει assert ότι η είσοδός της δεν είναι μηδέν. Για περισσότερες λεπτομέρειες, δες το Zig Language Reference και την υλοποίηση του std.debug.assert.
Ωστόσο, πρόσεξε ότι αυτή η άσκηση δεν δοκιμάζει προς το παρόν είσοδο 0 (επειδή το std.testing δεν υποστηρίζει ακόμα να περιμένεις ένα panic).
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Zig με 104 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.