In [3]:
!pip install cython
In [4]:
%load_ext Cython
In [5]:
%%cython
from libc.math cimport ceil, sqrt
cdef inline int primeQ(int n) nogil:
"""return a boolean, is the input integer a prime?"""
if n == 2:
return True
cdef int max_i = <int>ceil(sqrt(n))
cdef int i = 2
while i <= max_i:
if n % i == 0:
return False
i += 1
return True
cpdef unsigned long sumPrimes(int n) nogil:
"""return sum of all primes less than n """
cdef unsigned long i = 0
cdef int x
for x in range(2, n):
if primeQ(x):
i += x
return i
In [6]:
sumPrimes(10)
Out[6]:
In [7]:
import noodles
import time
In [8]:
%%time
for i in range(50000, 1000000, 50000):
print(sumPrimes(i), flush=True)
In [9]:
%%time
@noodles.schedule
def s_sum_primes(n):
return sumPrimes(n)
wf = noodles.gather(*map(s_sum_primes, range(50000, 1000000, 50000)))
In [10]:
%%time
result = noodles.run_parallel(wf, n_threads=10)
print(result)
In [ ]: