import Data.Array.Unboxed
primesSA = 2 : oddprimes ()
where
oddprimes () = 3 : sieve (oddprimes ()) 3 []
sieve (p:ps) x fs = [i*2 + x | (i,True) <- assocs a]
++ sieve ps (p*p) ((p,0) :
[(s
, rem (y
-q
) s
) | (s
,y
) <- fs
]) where
a = accumArray (\ b c -> False) True (1,q-1)
[(i,()) | (s,y) <- fs, i <- [y+s, y+s+s..q]]
main
= getLine >>= -- 2/1 mln: n^1.08 !
aW1wb3J0IERhdGEuQXJyYXkuVW5ib3hlZAoKcHJpbWVzU0EgOjogW0ludF0KcHJpbWVzU0EgPSAyIDogb2RkcHJpbWVzICgpCiAgd2hlcmUgCiAgICBvZGRwcmltZXMgKCkgPSAzIDogc2lldmUgKG9kZHByaW1lcyAoKSkgMyBbXQogICAgc2lldmUgKHA6cHMpIHggZnMgPSBbaSoyICsgeCB8IChpLFRydWUpIDwtIGFzc29jcyBhXSAKICAgICAgICAgICAgICAgICAgICAgICAgKysgc2lldmUgcHMgKHAqcCkgKChwLDApIDogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzLCByZW0gKHktcSkgcykgfCAocyx5KSA8LSBmc10pCiAgICAgd2hlcmUKICAgICAgcSA9IChwKnAteClgZGl2YDIKICAgICAgYSA6OiBVQXJyYXkgSW50IEJvb2wKICAgICAgYSA9IGFjY3VtQXJyYXkgKFwgYiBjIC0+IEZhbHNlKSBUcnVlICgxLHEtMSkKICAgICAgICAgICAgICAgICAgICAgWyhpLCgpKSB8IChzLHkpIDwtIGZzLCBpIDwtIFt5K3MsIHkrcytzLi5xXV0KICAgICAgICAgICAgICAgICAgICAgCm1haW4gPSBnZXRMaW5lID4+PSAgIC0tIDIvMSBtbG46IG5eMS4wOCAhCiAgICAgICAoXHItPiBwcmludCAuIGxhc3QgLiB0YWtlIChyZWFkIHIpICQgcHJpbWVzU0Ep