Найти - Пользователи
Полная версия: wi34rd && Shaman
Начало » Флейм » wi34rd && Shaman
1
wi34rd
Shaman
https://gist.github.com/wi34rd/ea6284a89af42927f0f03a129af869d4

Раз уж вы любитель больших скоростей, то у меня для вас задачка: http://www.spoj.com/problems/TDPRIMES/ мой рекорд 0.21 с. Кстати эту задачу еще никто не решил на D.
Shaman
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))
4kpt_V
wi34rd
1. PEP8
2. Явное лучше неявного, ага

 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))):

Если эти недостатки убрать, то код норм.
Shaman
А чем код более явный, тем менее он логически неверный.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB