ニコマコス(西暦60〜120年)による正の整数の分類法に基づいて、ある数値が完全数、過剰数、不足数のどれにあたるかを判定してください。
ギリシャの数学者ニコマコスは、正の整数の分類法を考案しました。それぞれの数値は、そのアリコット和に基づいて、完全数・過剰数・不足数のいずれか1つにだけ分類されます。
_アリコット和_とは、ある数値の約数のうち、その数値自身を除いたものの和と定義されます。
例えば、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を呼び出す側が、0以外の入力だけを渡す責任を負うことにしましょう。そこで、classify関数が、入力が0以外であることをアサートするようにしてください。詳しくは、Zig Language Referenceとstd.debug.assertの実装を見てください。
ただし、現在この演習では、入力が0の場合をテストしていないことに注意してください(std.testingがパニックを期待することをまだサポートしていないためです)。