#!/usr/bin/perl -w
BEGIN {
unshift
@INC
,
'../lib'
; }
$| = 1;
$amount
= Math::BigInt->new(
shift
|| 1000000 );
@primes
= (1,1,0);
my
$prime
= Math::BigInt->new (3);
$r
= 0;
my
$a
=
$amount
->numify();
for
(
$i
= 3;
$i
<
$a
;
$i
++)
{
$primes
[
$i
] =
$r
;
$r
= 1-
$r
;
}
OUTER:
while
(
$prime
<
$amount
)
{
$cur
=
$prime
;
while
(
$primes
[
$cur
])
{
$cur
+= 2;
last
OUTER
if
$cur
>=
$amount
;
}
$str
=
"$cur"
;
$str
=~ s/\+//;
$add
=
$cur
*2;
$prime
=
$cur
+ 2;
$cur
+=
$add
;
while
(
$cur
<
$amount
)
{
$primes
[
$cur
] = 1;
$cur
+=
$add
;
}
}
$i
= 0;
foreach
(
@primes
)
{
push
@real_primes
,
$i
if
$primes
[
$i
] == 0;
$i
++;
}
print
"last prime: $real_primes[-1]\n"
;
open
FILE,
'1000.txt'
or
die
"Can't read 1000.txt: $!"
;
my
@test
;
while
(<FILE>)
{
next
if
/^
next
if
/^\s*$/;
$_
=~ s/\s+/ /g;
$_
=~ s/^\s+//;
$_
=~ s/\s+$//;
push
@test
,
split
/\s+/,
$_
;
}
close
FILE;
my
$i
= 0;
foreach
(
@real_primes
)
{
print
"oups: $i: $test[$i] != $real_primes[$i]\n"
if
$test
[
$i
] !=
$real_primes
[
$i
];
$i
++;
last
if
$i
>= 1000;
}
print
"done\n"
;