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
|