Shaman
https://gist.github.com/wi34rd/ea6284a89af42927f0f03a129af869d4
Раз уж вы любитель больших скоростей, то у меня для вас задачка: http://www.spoj.com/problems/TDPRIMES/ мой рекорд 0.21 с. Кстати эту задачу еще никто не решил на D.
wi34rdУ меня с утра такой вариант:
https://gist.github.com/wi34rd/ea6284a89af42927f0f03a129af869d4
from functools import reduce from multiprocessing import Pool from operator import __mul__ POOL_SZ = 4 BASE = 10000 CHUNK_SZ = BASE // POOL_SZ + 1 def reduce_mul(vector): return reduce(__mul__, vector) def chunk_rng(rng, size): for i in rng[::size]: yield range(i, min(i + size, rng.stop)) if __name__ == '__main__': with Pool(POOL_SZ) as pool: total = reduce_mul( pool.map( reduce_mul, chunk_rng(range(1, BASE + 1), CHUNK_SZ) ) ) print(total)
wi34rdЯ подумаю. Пока моя адаптация кода из спора о скорости питона:
Раз уж вы любитель больших скоростей, то у меня для вас задачка: http://www.spoj.com/problems/TDPRIMES/ мой рекорд 0.21 с. Кстати эту задачу еще никто не решил на D.
import numpy as np from numba import vectorize, int32, int64, bool_ import time as time_ @vectorize(["bool_(int32)", "bool_(int64)"], nopython=True, target='parallel') def is_prime(n): i = 2 while True: if not n % i: return False i += 1 if i >= n: return True return True def primes_below_p(n): l = [] primes = is_prime(np.arange(n + 1)) for j in xrange(9, n + 1): if primes[j - 6] and primes[j]: l.append((j-6, j)) return l a = int(round(time_.time() * 1000)) primes = primes_below_p(100 * 1000) b = int(round(time_.time() * 1000)) print(primes) print("%s mils" % (b-a))
for part in pool.map(product, (range(x, x + number // processes_number) for x in range(1, number - number // processes_number + 2, number // processes_number))):