summaryrefslogtreecommitdiff
path: root/perl/p5.pl
diff options
context:
space:
mode:
Diffstat (limited to 'perl/p5.pl')
-rwxr-xr-xperl/p5.pl48
1 files changed, 24 insertions, 24 deletions
diff --git a/perl/p5.pl b/perl/p5.pl
index f63ca34..3bf5792 100755
--- a/perl/p5.pl
+++ b/perl/p5.pl
@@ -10,32 +10,32 @@ use List::Util qw(reduce max all);
# Imperative
my @primes = (2);
sub factorize {
- my $n = shift;
- for my $i ($primes[-1] .. $n) {
- push @primes, $i if all { $i % $_ != 0 } @primes;
- }
- my $factors;
- for my $prime (@primes) {
- if ($n % $prime == 0) {
- $factors->{$prime}++;
- $n /= $prime;
- redo;
- }
- }
- return $factors;
+ my $n = shift;
+ for my $i ($primes[-1] .. $n) {
+ push @primes, $i if all { $i % $_ != 0 } @primes;
+ }
+ my $factors;
+ for my $prime (@primes) {
+ if ($n % $prime == 0) {
+ $factors->{$prime}++;
+ $n /= $prime;
+ redo;
+ }
+ }
+ return $factors;
}
sub merge_factors {
- my $fst = shift;
- my $snd = shift;
- my $res;
- foreach my $k (keys %$fst) {
- $res->{$k} = max($res->{$k} || 0, $fst->{$k});
- }
- foreach my $k (keys %$snd) {
- $res->{$k} = max($res->{$k} || 0, $snd->{$k});
- }
- return $res;
+ my $fst = shift;
+ my $snd = shift;
+ my $res;
+ foreach my $k (keys %$fst) {
+ $res->{$k} = max($res->{$k} || 0, $fst->{$k});
+ }
+ foreach my $k (keys %$snd) {
+ $res->{$k} = max($res->{$k} || 0, $snd->{$k});
+ }
+ return $res;
}
my @factors = map { factorize $_ } (2..20);
@@ -43,6 +43,6 @@ my $mcm = reduce { merge_factors($a, $b) } @factors;
my $res = 1;
foreach my $k (keys %$mcm) {
- $res *= $k ** $mcm->{$k};
+ $res *= $k ** $mcm->{$k};
}
print $res, "\n";