Summation of primes: Difference between revisions

Content added Content deleted
(Added Sidef)
(→‎{{header|Sidef}}: added a sublinear version)
Line 620: Line 620:
<lang ruby>say sum_primes(2e6) #=> 142913828922</lang>
<lang ruby>say sum_primes(2e6) #=> 142913828922</lang>


Linear algorithm:
User-defined:
<lang ruby>func sum_primes(limit) {
<lang ruby>func sum_primes(limit) {
var sum = 0
var sum = 0
Line 630: Line 630:


say sum_primes(2e6)</lang>
say sum_primes(2e6)</lang>

Sublinear algorithm:
<lang ruby>func sum_of_primes(n) {

return 0 if (n <= 1)

var r = n.isqrt
var V = (1..r -> map {|k| idiv(n,k) })
V << range(V.last-1, 1, -1).to_a...

var S = Hash(V.map{|k| (k, polygonal(k,3)) }...)

for p in (2..r) {
S{p} > S{p-1} || next
var sp = S{p-1}
var p2 = p*p
V.each {|v|
break if (v < p2)
S{v} -= p*(S{idiv(v,p)} - sp)
}
}

return S{n}-1
}

say sum_of_primes(2e6)</lang>
{{out}}
{{out}}
<pre>
<pre>