Matt Owen

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

return to portfolio
  1.  #!/usr/bin/perl
  2.  
  3.  # Matthew Owen
  4.  # Project Euler #2
  5.  
  6.  use POSIX qw/ceil floor/;
  7.  use bignum;
  8.  
  9.  sub round
  10.  {
  11.   my $n = shift;
  12.   return int($n + .5*($n <=> 0));
  13.  }
  14.  
  15.  sub fib
  16.  {
  17.   my $n = shift;
  18.   my ($c1, $c2) = ((5+sqrt(5))/10, (-1+sqrt(5))/(2*sqrt(5)));
  19.   my ($fi1,$fi2) = ((1+sqrt(5))/2, (1-sqrt(5))/2);
  20.   return round($c1*$fi1**$n+$c2*$fi2**$n,1);
  21.  }
  22.  
  23.  ($i, $f, $sum) = (0, 0, 0);
  24.  
  25.  while ($f < 4000000)
  26.  {
  27.   $sum += $f;
  28.   $f = fib(2+$i*3);
  29.   $i ++;
  30.   print "Fib #", $i, " = ", $f, "\n";
  31.  }
  32.  
  33.  print "The answer to Project Euler #2 is...\n\t", $sum;