The sieve of Sundaram: Difference between revisions
Content added Content deleted
m (added whitespace.) |
SqrtNegInf (talk | contribs) (Added Perl) |
||
Line 694: | Line 694: | ||
The millionth Sundaram prime is 15_485_867</pre> |
The millionth Sundaram prime is 15_485_867</pre> |
||
=={{header|Perl}}== |
|||
<lang perl>use strict; |
|||
use warnings; |
|||
use feature 'say'; |
|||
my @sieve; |
|||
my $nth = 1_000_000; |
|||
my $k = 2.4 * $nth * log($nth) / 2; |
|||
$sieve[$k] = 0; |
|||
for my $i (1 .. $k) { |
|||
my $j = $i; |
|||
while ((my $l = $i + $j + 2 * $i * $j) < $k) { |
|||
$sieve[$l] = 1; |
|||
$j++ |
|||
} |
|||
} |
|||
$sieve[0] = 1; |
|||
my @S = (grep { $_ } map { ! $sieve[$_] and 1+$_*2 } 0..@sieve)[0..99]; |
|||
say "First 100 Sundaram primes:\n" . |
|||
(sprintf "@{['%5d' x 100]}", @S) =~ s/(.{50})/$1\n/gr; |
|||
my ($count, $index); |
|||
for (@sieve) { |
|||
$count += !$_; |
|||
(say "One millionth: " . (1+2*$index)) and last if $count == $nth; |
|||
++$index; |
|||
}</lang> |
|||
{{out}} |
|||
<pre>First 100 Sundaram primes: |
|||
3 5 7 11 13 17 19 23 29 31 |
|||
37 41 43 47 53 59 61 67 71 73 |
|||
79 83 89 97 101 103 107 109 113 127 |
|||
131 137 139 149 151 157 163 167 173 179 |
|||
181 191 193 197 199 211 223 227 229 233 |
|||
239 241 251 257 263 269 271 277 281 283 |
|||
293 307 311 313 317 331 337 347 349 353 |
|||
359 367 373 379 383 389 397 401 409 419 |
|||
421 431 433 439 443 449 457 461 463 467 |
|||
479 487 491 499 503 509 521 523 541 547 |
|||
One millionth: 15485867</pre> |
|||
=={{header|Phix}}== |
=={{header|Phix}}== |