You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
python-gjk/04/erastotenovo_sito.md

1.7 KiB

erastotenovo_sito.py

# yeehaw
# budeme hledat prvocisla
# fakt super
# zacnu od udelani funkce ktera bere
# horni hranici intervalu a vrati mi seznam
# vsech prvocisel do tyto hranice

# generate_primes(10) ma vyhodit [2, 3, 5, 7]
def generate_primes(lim): # lim je horni hranice intervalu
    nums = list(range(2, lim)) # seznam vsech cisel od 2 do lim
    primes = [] # prazny seznam
    
    x = nums[0] # ulozime si prvni cislo
    # ktery je prvocislo
    while x < int(lim**0.5): # staci ze hledam do odmocniny z lim
        # teoreticky bych mohl napsat jenom
        # while nums[0] < lim
        # ale je to pomalejsi
        # jo a int() mi z toho udela cele cislo
        # coz odmocnina neni
        x = nums[0] # aktualizace x, ma smysl az po prvnim cyklu 
        # prvocislo

        temp = [] # temporary seznam do kteryho budeme kopirovat

        primes.append(x) # ukladame prvocislo do seznamu prvocisel

        for i in nums: # prochazime nums a snazime se filtrovat
            # cili nechat jenom cisla ktery nejsou delitelna nove pridanym
            # prvocislem
            if i % x: # True jenom pokud `i % x` neni 0 -> nedelitelny
                temp.append(i) # temp nam slouzi jako budouci nums

        nums = temp # pozirame temp a aktualizujeme nums

    primes += nums # jinak by mi chybely cisla protoze jsem nahore
    # napsal : 
    # while x< int(lim**0.5)
    # kdybych to tam nenapsal tak tohle muzu vynechat

    return primes # vracim cisla

print(generate_primes(int(input("zadej cislo : "))))
# tohle je mozna trochu prasacky
# mohl jsem to rozepsat jako : 

# i = int(input("zadej cislo : "))
# print(generate_primes(i))

# ale nechtelo se mi lol