aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Pankoff <ccntrq@screenri.de>2021-12-02 19:13:21 +0100
committerAlexander Pankoff <ccntrq@screenri.de>2021-12-02 19:13:21 +0100
commit425892a3af4eff1595cbfa3de7928ce2d3b0f577 (patch)
treef248242b8e3621dca77ce153be094d6a5bb12f98
parent48f2afa206bbcd528658c4b3bdb73afb6e48f41f (diff)
downloadperlweeklychallenge-club-425892a3af4eff1595cbfa3de7928ce2d3b0f577.tar.gz
perlweeklychallenge-club-425892a3af4eff1595cbfa3de7928ce2d3b0f577.tar.bz2
perlweeklychallenge-club-425892a3af4eff1595cbfa3de7928ce2d3b0f577.zip
Optimize find_divisors
-rw-r--r--challenge-141/alexander-pankoff/perl/ch-1.pl14
1 files changed, 9 insertions, 5 deletions
diff --git a/challenge-141/alexander-pankoff/perl/ch-1.pl b/challenge-141/alexander-pankoff/perl/ch-1.pl
index bb4a1b6fb2..bc2e50f85c 100644
--- a/challenge-141/alexander-pankoff/perl/ch-1.pl
+++ b/challenge-141/alexander-pankoff/perl/ch-1.pl
@@ -25,13 +25,17 @@ sub find_k_lowest_integers_with_exactly_n_divisors ( $k, $n ) {
}
sub find_divisors($x) {
+ return 1 if $x == 1;
my @out;
- for ( my $i = 1 ; $i <= int( $x / 2 ) ; $i++ ) {
- push @out, $i if $x % $i == 0;
+ my $max = $x;
+ for ( my $i = 1 ; $i < $max ; $i++ ) {
+ if ( $x % $i == 0 ) {
+ $max = $x / $i;
+ push @out, $i;
+ push @out, $max if $i != $max;
+ }
}
- push @out, $x;
-
return @out;
}
@@ -41,7 +45,7 @@ sub explain ( $x, $count, @divisors ) {
. " such number having exactly "
. scalar @divisors
. " divisors.";
- say join( ", ", @divisors );
+ say join( ", ", sort { $a <=> $b } @divisors );
}