Matt Owen

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

return to portfolio
  1.  #!/usr/bin/perl
  2.  
  3.  use strict;
  4.  use warnings;
  5.  use divisors;
  6.  use POSIX qw/floor/;
  7.  
  8.  my $d = new divisors;
  9.  my (@primes, @final);
  10.  
  11.  $d->make_sieve(1602);
  12.  
  13.  @primes = $d->get_primes(1000);
  14.  
  15.  sub primes_length {
  16.   my $f = shift;
  17.   my $k = 0;
  18.   $k++ while ($d->is_prime($f->($k)));
  19.   return $k;
  20.  }
  21.  
  22.  my $count = 0;
  23.  @final = (0, 0, 0);
  24.  
  25.  for my $b (@primes) {
  26.   for my $p (@primes) {
  27.   my ($a, $f, $length);
  28.  
  29.   $a = $p - $b - 1;
  30.  
  31.   next if $a < -999 || $a > 999;
  32.  
  33.   $f = sub { my $n = shift; $n**2+$a*$n+$b };
  34.   $length = primes_length $f;
  35.  
  36.   @final = ($a, $b, $length) if $final[2] < $length;
  37.   }
  38.  }
  39.  
  40.  print "a=$final[0]\nb=$final[1]\nlength=$final[2]";