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.py

51 lines
1.6 KiB
Python

# 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