亲和数
作者:Gerhard R
https://projecteuler.net/problem=21
令 d(n) 表示 n 的所有真因数(小于 n 且能整除 n 的数)的和。如果 d(a) = b 且 d(b) = a,其中 a ≠ b,则 a 和 b 称为一对亲和数,a 和 b 都称为亲和数。
例如,220 的真因数是 1、2、4、5、10、11、20、22、44、55 和 110;因此 d(220) = 284。284 的真因数是 1、2、4、71 和 142;所以 d(284) = 220。
求 10000 以下所有亲和数的和。
源代码: prob021-gerdr.pl
use v6;
sub d(Int $n) {
my $sum = 1;
my $sqrt-n = sqrt $n;
for 2..Int($sqrt-n) -> $a {
my $b = $n div $a;
$sum += $a + $b if $a * $b == $n;
}
$sqrt-n ~~ Int ?? $sum - $sqrt-n !! $sum;
}
my $sum = 0;
for 1..100_000 -> $a {
my $b = d($a);
$sum += $a + $b if $a < $b and d($b) == $a;
}
say $sum;
Perl 6 示例