Advertisement
Guest User

prime gaps

a guest
Feb 5th, 2016
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 2.06 KB | None | 0 0
  1. #!/usr/bin/env perl
  2. use warnings;
  3. use strict;
  4. use Math::BigFloat lib=>"GMP";
  5. use Math::GMPz;
  6. use Math::Prime::Util qw/:all/;
  7. use feature ':5.10';
  8. use File::Slurp;
  9.  
  10. my $prim=47;
  11. my @crt = (2552748177891450,4525099353657960,4890645049862880,6157389981878520,10854052306322600,8195665938985140,16650825898473700);
  12.  
  13. my $beg = shift || 1;
  14. my $end = shift || 3000000000;
  15. my $fact = Math::GMPz->new(primorial($prim));
  16. my $minustarget = 200;
  17. my $target=150;
  18. my $filename='primegaps-perl.txt';
  19. my $addi=0;
  20. my $line="";
  21. my $meritrec=0;
  22. my $gaprec=0;
  23.  
  24. my $counter=-1;
  25.  
  26. foreach my $i ($beg .. $end)
  27. {
  28.  
  29.     $counter=$counter+1;
  30.     if ($counter == 50000) {
  31.         print "$i\n";
  32.         $counter=0;
  33.     }  
  34.     my $fact_i = $fact * $i;
  35.    
  36.    
  37.    
  38.     foreach my $a (@crt)
  39.     {  
  40.         my $num = $fact_i+$a+855;
  41.             my $start = prev_prime($num);
  42.         my $startpoint = $num-$start;
  43.        
  44.         if ($startpoint> $minustarget)
  45.         {
  46.             my $end = next_prime($num);
  47.                 my $gap = $end - $start;
  48.             my $endpoint = $end-$num;
  49.  
  50.             if ($gap> $target)
  51.             {
  52.                
  53.                 open(my $fh, '>>', $filename) or die "Could not open file '$filename' $!";
  54.                 my $merit = merit($start, $gap);
  55.                
  56.                  if ($merit <15 && $gap>$target) { $target=$gap; print "nouvel écart : $target\n";}   
  57.                     print "$i  $a  $startpoint $endpoint $gap  $merit\n";
  58.                     my $addi=$a+855;               
  59.                     if ($merit > $meritrec || $merit > 21.5 ){
  60.                         $meritrec=$merit ; say "nouveau record de merite : $meritrec";
  61.                         $line= "$i*$prim#+$addi-$startpoint et l'ecart est de $gap et a un merite de $merit";
  62.                         say $fh "$line";
  63.                     }
  64.                     if ($gap > $gaprec) {
  65.                         $gaprec=$gap; say "nouveau record d 'ecart : $gaprec"; 
  66.                                                
  67.                     }
  68.                     else {
  69.                        
  70.                         $line= "$i*$prim#+$addi-$startpoint et l'ecart est de $gap";
  71.                     }                  
  72.                     print "$line\n";
  73.                     close $fh;
  74.             #} else {
  75.             #   print "merite pas assez gros\n";
  76.             #   }                  
  77.             }
  78.            
  79.         }
  80.     }
  81.  
  82. }
  83.  
  84. sub merit {
  85.  my($n, $gap) = @_;
  86.  my $fgap = Math::BigFloat->new("$gap");
  87.  my $fn   = Math::BigFloat->new("$n");
  88.  return sprintf("%.6lf", $fgap / log($fn));
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement