Matt Owen

source code for "files/pe/pe_023.pl"

return to portfolio
  1.  #!/usr/bin/perl
  2.  
  3.  use strict;
  4.  use warnings;
  5.  use divisors;
  6.  use necessary;
  7.  
  8.  use POSIX qw/ceil/;
  9.  
  10.  my $d = new divisors;
  11.  my (@abundants, %sums, $k);
  12.  
  13.  
  14.  $d->make_sieve(28124);
  15.  
  16.  for (12..28124) {
  17.   push(@abundants, $_) if 2*$_ < $d->divisor_sum($_);
  18.  }
  19.  
  20.  for (0..int @abundants-1) {
  21.   for $k ($_..int @abundants-1) {
  22.   $sums{$abundants[$_]+$abundants[$k]} = 1;
  23.   }
  24.  }
  25.  
  26.  my @arr;
  27.  
  28.  @arr = grep { $_ < 28124 } keys %sums;
  29.  
  30.  print 28123*28124/2 - necessary::sum(@arr);