Summation of primes: Difference between revisions

→‎Python :: Functional: Added a more efficient variant (defined over a generator of primes)
(→‎{{header|Haskell}}: Added a Haskell version)
(→‎Python :: Functional: Added a more efficient variant (defined over a generator of primes))
Line 401:
 
return not any(map(p, range(5, 1 + int(n ** 0.5), 6)))
 
 
# MAIN ---
if __name__ == '__main__':
main()</lang>
{{Out}}
<pre>142913828922</pre>
 
 
Or, more efficiently, assuming that we have a generator of primes:
 
<lang python>'''Summatiom of primes'''
 
from itertools import takewhile
 
 
# sumOfPrimesBelow :: Int -> Int
def sumOfPrimesBelow(n):
'''Sum of all primes between 2 and n'''
return sum(takewhile(lambda x: n > x, primes()))
 
 
# ------------------------- TEST -------------------------
# main :: IO ()
def main():
'''Sum of primes below 2 million'''
print(
sumOfPrimesBelow(2_000_000)
)
 
 
# ----------------------- GENERIC ------------------------
 
# primes :: [Int]
def primes():
''' Non finite sequence of prime numbers.
'''
n = 2
dct = {}
while True:
if n in dct:
for p in dct[n]:
dct.setdefault(n + p, []).append(p)
del dct[n]
else:
yield n
dct[n * n] = [n]
n = 1 + n
 
 
9,655

edits