亲和数
作者: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;