Jakub Vojáček napsal(a), dne 12.12.2008 16:34:
Dobrý den,

Vyvýjím jednu aplikaci a potřebuji, aby daná aplikace uměla rozložit číslo na součin prvočísel (prvočíselný rozklad). Naprogramovat nějaký základní algoritmus není problém, ale problém nastane, pokud do algoritmu zadám nějaké větší číslo (např. 4848484848484841178813). Mému algoritmu toto číslo trvá dost dlouho, ale například na této stránce dostanu výsledek takřtka okamžitě: http://www.numberempire.com/primenumbers.php

Jaký algoritmus byste mi doporučili používat? Na menší čísla se dá použít 
faktorizace dělením:

def faktorizace_delenim(i):
    prvocisla = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 
59, 61, 67, 71, 73, 79, 83, 89, 97]
    seznam=[]
    cislo = 0
    while len(prvocisla) != cislo:
        if i%prvocisla[cislo] == 0:
            seznam.append(prvocisla[cislo])
            i = i/prvocisla[cislo]
        else:
cislo = cislo +1 if i == 1: break
    seznam.append(i)
    return seznam



ale tenhle algoritmus má tu nevýhodu, že bych ten seznam prvočísel (o velikost 
od 0 do sqrt(i)) musel vygenerovat, což trvá dost dlouho.


Já bych si zkusil tipnout že toto bude ono s tím, že prostě mají v databázi prvních (sto) tisíc prvočísel na stálo, které se bud při startu serveru odněkud načtou nebo jednou vygenerují. Pokud to máš v obyčejné desktopové aplikaci, mohl by výpočet řady prvočísel běžet po startu v odděleném vláknu. A než se uživatel rozmyslí, co chce, bude hotovo.

--
geon
Pavel Kosina

_______________________________________________
Python mailing list
[email protected]
http://www.py.cz/mailman/listinfo/python

Odpovedet emailem