Ramanujan primes: Difference between revisions
Content added Content deleted
(Realize in F#) |
SqrtNegInf (talk | contribs) (Added Perl) |
||
Line 385: | Line 385: | ||
Elapsed time: 34 ms</pre> |
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}}== |
=={{header|Phix}}== |