Ramanujan primes: Difference between revisions

Content added Content deleted
m (use primes instead of primesmask)
m (add timings)
Line 100: Line 100:
<lang julia>using Primes
<lang julia>using Primes


@time let
MASK = primesmask(625000)
PIVEC = accumulate(+, MASK)
PI(n) = n < 1 ? 0 : PIVEC[n]


function Ramanujan_prime(n)
const PRIMES = [primes(625000)]
maxposs = Int(ceil(4n * (log(4n) / log(2))))

for i in maxposs:-1:1
function PI(n)
PI(i) - PI(i ÷ 2) < n && return i + 1
if n > first(PRIMES)[end]
empty!(PRIMES)
end
push!(PRIMES, primes(2n))
return 0
end
end
return n < 100000 ? findfirst(x -> x > n, first(PRIMES)) - 1 :
findlast(x -> x <= n, first(PRIMES))
end


for i in 1:100

function Ramanujan_prime(n)
print(lpad(Ramanujan_prime(i), 5), i % 20 == 0 ? "\n" : "")
maxposs = Int(ceil(4n * (log(4n) / log(2))))
for i in maxposs:-1:1
PI(i) - PI(i ÷ 2) < n && return i + 1
end
end
return 0
end


println("\nThe 1000th Ramanujan prime is ", Ramanujan_prime(1000))
for i in 1:100
println("\nThe 10,000th Ramanujan prime is ", Ramanujan_prime(10000))
print(lpad(Ramanujan_prime(i), 5), i % 20 == 0 ? "\n" : "")
end
end

println("\nThe 1000th Ramanujan prime is ", Ramanujan_prime(1000))

println("\nThe 10,000th Ramanujan prime is ", Ramanujan_prime(10000))
</lang>{{out}}
</lang>{{out}}
<pre>
<pre>