Ramanujan primes: Difference between revisions

Added Perl
(Realize in F#)
(Added Perl)
Line 385:
 
Elapsed time: 34 ms</pre>
 
=={{header|Perl}}==
{{trans|Raku}}
{{libheader|ntheory}}
<lang perl>use strict;
use warnings;
use ntheory 'primes';
 
sub count {
my($n,$p) = @_;
my $c = -1;
do { $c++ } until $$p[$c] > $n;
return $c;
}
 
my(@rp,@mem);
my $primes = primes( 100_000_000 );
 
sub r_prime {
my $n = shift;
for my $x ( reverse 1 .. int 4*$n * log(4*$n) / log 2 ) {
my $y = int $x / 2;
return 1 + $x if ($mem[$x] //= count($x,$primes)) - ($mem[$y] //= count($y,$primes)) < $n
}
}
 
push @rp, r_prime($_) for 1..100;
print "First 100:\n" . (sprintf "@{['%5d' x 100]}", @rp) =~ s/(.{100})/$1\n/gr;
 
print "\n\n 1000th: " . r_prime( 1000) . "\n";
print "\n10000th: " . r_prime(10000) . "\n"; # faster with 'theory' function 'ramanujan_primes'</lang>
{{out}}
<pre>First 100:
2 11 17 29 41 47 59 67 71 97 101 107 127 149 151 167 179 181 227 229
233 239 241 263 269 281 307 311 347 349 367 373 401 409 419 431 433 439 461 487
491 503 569 571 587 593 599 601 607 641 643 647 653 659 677 719 727 739 751 769
809 821 823 827 853 857 881 937 941 947 967 983 1009 1019 1021 1031 1049 1051 1061 1063
1087 1091 1097 1103 1151 1163 1187 1217 1229 1249 1277 1289 1297 1301 1367 1373 1423 1427 1429 1439
 
1000th: 19403
10000th: 242057</pre>
 
=={{header|Phix}}==
2,392

edits