问题描述
abundant 数是其所有因子的和大于该数,而deficient数是其因子的和小于该数。
例如, 考虑数字 21。它的因子是 1, 3, 7 和 21, 这些因子的和是32。 因为 32 小于 2 x 21, 所以 21 是 deficient。它的差额是 2 x 21 - 32 = 10。
12 是第一个 abundant 数。它的因子是 1, 2, 3, 4, 6 和 12, 并且它们的和是 28。 因为 28 大于 2 x 12, 所以 12 是 abundant。它们的差额是 28 - 2 x 12 = 4。
输入描述
你会给定一个整数, 每行一个。例如:
18
21
9
输出描述
你的程序应该打印信息, 如果数字是 deficient, abundant(和它的abundance), 或者都不。例如:
18 abundant by 3
21 deficient
9 ~~neither~~ deficient
输入挑战
111
112
220
69
134
85
挑战输出:
111 ~~neither~~ deficient
112 abundant by 24
220 abundant by 64
69 deficient
134 deficient
85 deficient
for lines() -> $n {
my $sum = (1..$n/2).grep($n %% *).sum;
say "$n " ~ ($sum > $n ?? "abundant by {$sum - $n}" !!
$sum < $n ?? "deficient" !! "neither");
}
或者
for lines() -> $n {
given (1..$n/2).grep($n %% *).sum {
when * > $n { say "$n abundant by {$_ - $n}" }
when * < $n { say "$n deficient" }
default { say "$n neither" }
}
}