根据 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函数断言它的输入非零。
更多细节请参阅 Zig 语言参考 以及 std.debug.assert 的实现。
不过请注意,本练习目前不测试输入为 0 的情况(因为std.testing尚不支持预期 panic)。