Zkouším si teď udělat eratesthenovo síto v pythonu, tak aby počítalo i opravdu vysoká čísla, problém je, že když používám range a seznamy tak mi to hlásí memory error, takže jsem zkusil používat ntice a xrange tady, ale program jede opravdu nehorázně pomalu. Poradíte mi někdo jak by to šlo zoptimalizovat?(asi toho bude opravdu hodně, tak se mi moc nesmějte :))
def sito(cislo):
def promazani(cislo,seznam):
def pozice(cislo,nt):
pozice=-1
for i in nt:
pozice=pozice+1
if i==cislo:
return pozice
umisteni=pozice(cislo,seznam)
seznam=seznam[:umisteni]+seznam[umisteni+1:]
return seznam
seznam=()
for i in xrange(2,cislo):
seznam=seznam+(i,)
prvocisla=()
while seznam[0]<odmocnina(cislo) and seznam!=():
prvocisla=prvocisla+(seznam[0],)
nasobky=range(seznam[0]*2,seznam[-1],seznam[0])
for i in nasobky:
if i in seznam:
seznam=promazani(i,seznam)
seznam=seznam[1:]
prvocisla=prvocisla+seznam[:]
return prvocisla
Mimochodem jak jsou na tom s časovou a systémovou náročností funkce map a filter, vlastně obecně celé funkcionální programování v python?