diff options
| author | Alexander Pankoff <ccntrq@screenri.de> | 2021-12-02 19:13:21 +0100 |
|---|---|---|
| committer | Alexander Pankoff <ccntrq@screenri.de> | 2021-12-02 19:13:21 +0100 |
| commit | 425892a3af4eff1595cbfa3de7928ce2d3b0f577 (patch) | |
| tree | f248242b8e3621dca77ce153be094d6a5bb12f98 | |
| parent | 48f2afa206bbcd528658c4b3bdb73afb6e48f41f (diff) | |
| download | perlweeklychallenge-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.pl | 14 |
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 ); } |
