From f2f8c5a62728a03a1346f02707e4ccb228f797e5 Mon Sep 17 00:00:00 2001 From: Roger Bell_West Date: Tue, 6 Aug 2019 16:46:15 +0100 Subject: Better divisors calculation, rather faster --- challenge-020/roger-bell-west/perl6/ch-2.p6 | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/challenge-020/roger-bell-west/perl6/ch-2.p6 b/challenge-020/roger-bell-west/perl6/ch-2.p6 index 9f095df46b..519f2c8866 100755 --- a/challenge-020/roger-bell-west/perl6/ch-2.p6 +++ b/challenge-020/roger-bell-west/perl6/ch-2.p6 @@ -4,17 +4,11 @@ my $a=1; while (1) { $a++; my @a=divisors_unself($a); - unless (@a) { - next; - } my $b=@a.sum; if ($b <= $a) { next; } my @b=divisors_unself($b); - unless (@b) { - next; - } my $aa=@b.sum; if ($aa == $a) { print "$a, $b\n"; @@ -23,10 +17,14 @@ while (1) { sub divisors_unself ($k) { my @d=(1); - for 2..$k/2.Int -> $d { + my @e; + for 2..$k.sqrt.Int -> $d { if ($k % $d == 0) { - push @d,$d; + push @d,$d,$k/$d; + if @d[*-1] == $d { + pop @d; + } } } return @d; -} \ No newline at end of file +} -- cgit