Matt Owen

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

return to portfolio
  1.  #!/usr/bin/perl
  2.  
  3.  use strict;
  4.  use warnings;
  5.  use divisors;
  6.  
  7.  my $d =new divisors;
  8.  my ($k, $p, $sum);
  9.  my %lis;
  10.  
  11.  $d->make_sieve(10000);
  12.  
  13.  for $k (3..10000) {
  14.   $lis{$k} = 0;
  15.  }
  16.  
  17.  while (($k, $p) = each(%lis)) {
  18.   $lis{$k} = $d->divisor_sum($k)-$k;
  19.  }
  20.  
  21.  $sum = 0;
  22.  
  23.  while (($k, $p) = each(%lis)) {
  24.   $sum += $k if defined($lis{$p}) && ($lis{$k} == $p && $k == $lis{$p} && $k != $p);
  25.  }
  26.  
  27.  print $sum;