#!/usr/bin/env python3
'''
Eratosthenovo síto
----
Verze: 2, minimum asked
Autor: David Roesel, roesel@gmail.com
Web: http://david.roesel.cz/python
Popis:
        Vypíše prvočísla od 0 do max pomocí metody Eratosthenova síta. V této verzi se
        také snažím o snížení dotazů na dělitelnost na minimum.
        (Psáno pro Python 3.2, indentace 1x TAB.
         Kód je volně šiřitelný pod licencí Creative Commons Attribution 3.0 Unported)
'''
# Vytvářím pole 2 až MAX
# "i" si drží počet "žádostí o dělení"
i=0
max=10000
max+=1
ori=list(range(2,max))
index_co_delim=1
index_kterym_delim=0
# Dokud mám v listu čísla na dělitele
#while index_kterym_delim<=len(ori):
while ori[index_kterym_delim]<=(ori[len(ori)-1]**(0.5)):
    # Dokud mám v listu čísla na dělence
    while index_co_delim<len(ori):
        # Pokud je číslo dělitelné bezezbytku...
        i+=1
        #print("Zkouším dělit ", ori[index_co_delim], "/", ori[index_kterym_delim])
        if ori[index_co_delim]%ori[index_kterym_delim]==0:
            # ...potom ho vymaž z pole
            del ori[index_co_delim]
        # Pokud není...
        else:
            # ...pak ho tam nech a pokračuj na další.
            index_co_delim+=1
    # Zvětšuji dělitele
    index_kterym_delim+=1
    # Nastavuji dělence nad dělitele, abych nevydělil prvočíslo samo sebou a posouvám co nejblíže mocnině dělitele
    index_co_delim=index_kterym_delim+1+int(round(0.2757255432*(ori[index_kterym_delim]**(2*0.9076161396)), 0))
print("-----\nPrvočísla jsou: ", ori)
print("-----\nProběhlo ", i, " pokusů o dělení.")

