Matt Owen

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

return to portfolio
  1.  #!/usr/bin/perl
  2.  
  3.  use primes;
  4.  
  5.  my $k;
  6.  
  7.  sub triangle {
  8.   my $n = shift;
  9.   return $n*($n+1)/2;
  10.  }
  11.  
  12.  sub number_of_divisors {
  13.   my ($n, $k, $mul) = (shift, 0, 1);
  14.   my $factors = primes::factor($n);
  15.  
  16.   for $k (keys %$factors) {
  17.   $mul *= $factors->{$k}+1;
  18.   }
  19.  
  20.   return $mul;
  21.  }
  22.  
  23.  
  24.  my ($left, $right, $ticker);
  25.  $ticker=0;
  26.  
  27.  for $k (12300..12400) {
  28.  
  29.   print '.' if $ticker % 100 == 0;
  30.   $ticker++;
  31.  
  32.   if ($k % 2 == 0) {
  33.   $left = number_of_divisors($k/2);
  34.   $right= number_of_divisors($k+1);
  35.   }
  36.   else {
  37.   $left = number_of_divisors($k);
  38.   $right= number_of_divisors(($k+1)/2);
  39.   }
  40.  
  41.   if ($left*$right >= 500) {
  42.   print $k;
  43.  
  44.   last;
  45.   }
  46.  }