summaryrefslogtreecommitdiffstats
path: root/023.pl
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2009-05-15 19:21:30 -0500
committerJesse Luehrs <doy@tozt.net>2009-05-15 19:21:30 -0500
commitecb58863c7dc0185708ea52fc6ca956c0f8fb1f7 (patch)
tree80407d3ad44c34c90cc154a893338443ee097ffa /023.pl
parent0e52573b8c2a5377f32ffac7ee8db66126844138 (diff)
downloadprojecteuler-ecb58863c7dc0185708ea52fc6ca956c0f8fb1f7.tar.gz
projecteuler-ecb58863c7dc0185708ea52fc6ca956c0f8fb1f7.zip
solution 23
Diffstat (limited to '023.pl')
-rwxr-xr-x023.pl25
1 files changed, 25 insertions, 0 deletions
diff --git a/023.pl b/023.pl
new file mode 100755
index 0000000..c145fb7
--- /dev/null
+++ b/023.pl
@@ -0,0 +1,25 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use Math::Factor::XS qw/factors/;
+use List::Util qw/sum/;
+
+sub abundant {
+ my ($n) = @_;
+ return 1 + (sum(factors($n)) || 0) > $n;
+}
+
+my @abundant = grep { abundant($_) } 1..28123;
+my %sums;
+A: for my $a (@abundant) {
+ for my $b (@abundant) {
+ my $n = $a + $b;
+ next A if $n > 28123;
+ $sums{$n} = 1;
+ }
+}
+my $total = 0;
+for my $n (1..28123) {
+ $total += $n unless exists $sums{$n};
+}
+print "$total\n";