根据 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()函数的数字不是_正整数_时,使用 raise 语句来“抛出”ValueError。只有既用raise抛出该exception,又附上消息,测试才会通过。
要给ValueError附上消息,就把消息作为实参传给该exception类型:
# if a number to be classified is less than 1.
raise ValueError("Classification is only possible for positive integers.")